我们正在对Ruby on Rails 3进行升级(目前大约是世界的一半),例如,我一直在努力地替换RAILS_ENV的用法
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?
但是我不确定该怎么做:
ENV["RAILS_ENV"] ||= 'production'
我们将其放在一堆Rake任务和守护程序的顶部,其想法是您可以在命令行上传递
RAILS_ENV
,但如果未传递,则默认为'production'。我不确定采用新的Rails3合适的方式。所以现在我的
rails:upgrade:check
强烈抱怨Rails2-ishness的入侵...我不知道是否:
::Rails.env ||= 'production'
将工作。
守护程序中是否存在
Rails.env
?是否自动在命令行中预先填充了RAILS_ENV的值,还是我们需要一种新的方式来调用守护程序?
正确的口头禅是什么?
更新:
查看
Rails.env
的源代码,def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
我们可以推断出很多事情。
首先,看起来
RAILS_ENV
实际上仍然存在-这意味着可以对其进行设置,而Rails.env
将找到它...如果Rails在守护程序的上下文中有效,则无需执行其他操作。如果不是,那么我只是不太在意并像以前一样使用旧的
RAILS_ENV
。 最佳答案
Rails.env
实际上是ActiveSupport::StringInquirer
类型,它覆盖了method_missing
,以提供良好的相等语法。检查:http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
因此,如果要通过defaut将其覆盖为“生产”,则应编写:
Rails.env ||= ActiveSupport::StringInquirer.new('production')
但是,您必须检查哪个是
Rails.env
的未初始化值,我不确定它是否真的是nil
。IMO的最佳做法是将
env RAILS_ENV=production
放在所有脚本的前面。关于ruby-on-rails - 为ENV [“RAILS_ENV”] || ='production'正确替换Ruby on Rails 3吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4017069/