Rails.env与RAILS_ENV

时间:2010-04-26 16:18:49

标签: ruby-on-rails

在检查运行的env时,我在示例中看到了两个。什么是首选?出于所有意图和目的,它们是否相等?

5 个答案:

答案 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.root
  • Rails.env
  • Rails.logger

这不仅仅是化妆品的改变。 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方法