在检查运行的env时,我在示例中看到了两个。什么是首选?出于所有意图和目的,它们是否相等?
答案 0 :(得分:355)
According to the docs,#Rails.env
包裹RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
但是,请使用ActiveSupport::StringInquirer
专门查看 包裹的方式:
在这个类中包装一个字符串给出 你是一个更漂亮的测试方法 平等。返回的值 Rails.env包含在 StringInquirer对象所以代替 这叫:
Rails.env == "production"
你可以这样称呼:
Rails.env.production?
所以他们不是完全等同于,但他们相当接近。我还没有使用Rails,但我会说#Rails.env
因使用StringInquirer
而具有更具视觉吸引力的选项。
答案 1 :(得分:28)
在Rails 2.x之前,获取当前环境的首选方法是使用RAILS_ENV
常量。同样,您可以使用RAILS_DEFAULT_LOGGER
获取当前记录器,或使用RAILS_ROOT
获取根文件夹的路径。
从Rails 2.x开始,Rails为Rails
模块引入了一些特殊方法:
这不仅仅是化妆品的改变。 Rails模块提供了使用StringInquirer
支持等标准常量所不具备的功能。
还有一些细微的差别。 Rails.root
不会返回简单的String
但是Path
个实例。
无论如何,首选方法是使用Rails
模块。常量在Rails 3中已弃用,将在未来版本中删除,可能是Rails 3.1。
答案 2 :(得分:27)
ENV['RAILS_ENV']
现已已弃用。
你应该使用明显更好的Rails.env
。
答案 3 :(得分:2)
调试我的应用时出现奇怪的行为: 需要“active_support / notifications” (rdb:1)p ENV ['RAILS_ENV'] “测试” (rdb:1)p Rails.env “发展”
我会说你应该坚持一个或另一个(最好是Rails.env)
答案 4 :(得分:2)
更新:在Rails 3.0.9中: 在railties / lib / rails.rb中定义的env方法