当检查env one正在运行时,我在例子中看到了这两种情况。喜欢是什么?它们在所有意图和目的上都是平等的吗?


当前回答

根据文档,#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。环境是包裹在一个 StringInquirer对象,而不是 调用: Rails。Env == "生产" 你可以调用它: Rails.env.production吗?

所以它们并不完全相等,但相当接近。我还没有经常使用Rails,但是我要说#Rails。由于使用StringInquirer, env当然是更有视觉吸引力的选择。

其他回答

ENV['RAILS_ENV']现在已弃用。

您应该使用Rails。Env显然要好得多。

在调试我的应用程序时奇怪的行为: 需要“active_support /通知” (rdb:1) p ENV['RAILS_ENV'] “测试” (rdb:1) p Rails.env “发展”

我会说你应该坚持使用其中一个(最好是Rails.env)

Rails 2之前。因此,获取当前环境的首选方法是使用RAILS_ENV常量。同样,您可以使用RAILS_DEFAULT_LOGGER获取当前记录器,或者使用RAILS_ROOT获取根文件夹的路径。

从Rails 2开始。x, Rails用一些特殊的方法引入了Rails模块:

Rails.root Rails.env Rails.logger

这不仅仅是表面上的改变。Rails模块提供了使用标准常量(如StringInquirer支持)所不具备的功能。 也有一些细微的区别。Rails。root返回的不是一个简单的字符串,而是一个路径实例。

无论如何,首选的方法是使用Rails模块。常量在Rails 3中已弃用,并将在未来的版本(也许是Rails 3.1)中被移除。

更新:在Rails 3.0.9: railties/lib/rails.rb中定义的Env方法

根据文档,#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。环境是包裹在一个 StringInquirer对象,而不是 调用: Rails。Env == "生产" 你可以调用它: Rails.env.production吗?

所以它们并不完全相等,但相当接近。我还没有经常使用Rails,但是我要说#Rails。由于使用StringInquirer, env当然是更有视觉吸引力的选择。