如何在运行时访问Rails配置值?

70

我使用的是Rails 2.3.x版本。我想要一个小的代码段只在config.cache_classes为true时运行。默认情况下,生产环境为true,开发环境为false。

如何从environment.rb、development.rb和production.rb文件之外访问config.cache_classes的值?很容易判断我们是否处于生产或开发环境,Rails.env会给出答案。但不能保证开发人员没有在开发环境中设置config.cache_classes = true

我当然明白你一般不想在开发和生产中运行单独的代码路径。在这种特定情况下,我们只是不在启动时执行某些工作;如果稍后需要执行它,我们将在开发和生产中都这样做。

2个回答

112

对于 Rails 2,您可以执行以下操作:

Rails.configuration.cache_classes

如果你将来切换到Rails 3,情况会有所不同;你可以使用以下代码访问相同的值:

Rails.application.config.cache_classes

嘿,知道这肯定是一些显而易见的东西。我试过Rails.config,没想到要试试那个。谢谢。时间限制过后我会接受这个答案。 - ChrisInEdmonton
perform_caching存在一个异常,它也可以针对每个控制器进行设置,因此您应该按控制器访问它。 - iain
8
对我来说,它是 MyApp::Application.config.foo (Rails 4.1)。 - Andrey Mikhaylov - lolmaus
据我所见,它们是相同的至少,自Rails 3.0.20以来。 - x-yuri

4

根据您在模块中的位置,您可能需要访问根命名空间。这应该为Rails 3+提供了一种通用的访问方式:

::Rails.application.config


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接