【发布时间】:2011-02-12 11:44:46
【问题描述】:
在检查正在运行的环境时,我在示例中看到了这两种情况。首选什么?它们在所有意图和目的上是否平等?
【问题讨论】:
标签: ruby-on-rails
在检查正在运行的环境时,我在示例中看到了这两种情况。首选什么?它们在所有意图和目的上是否平等?
【问题讨论】:
标签: ruby-on-rails
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 而更具视觉吸引力的选择。
【讨论】:
Rails.env 是新标准,因为RAILS_ENV 正在被弃用。
ENV['RAILS_ENV'] 现在已弃用。
您应该使用Rails.env,这显然更好。
【讨论】:
在 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。
【讨论】:
Rails.env 工作没有问题。
调试我的应用时出现的奇怪行为: 需要“active_support/notifications” (rdb:1) p ENV['RAILS_ENV'] “测试” (rdb:1) p Rails.env “发展”
我会说你应该坚持一个或另一个(最好是 Rails.env)
【讨论】:
更新:在 Rails 3.0.9 中: railties/lib/rails.rb 中定义的 env 方法
【讨论】: