我们正在对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的入侵……
我不知道是否:
::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
。
发布于 2010-11-15 06:44:16
Rails.env
实际上是ActiveSupport::StringInquirer
类型,它覆盖了method_missing
,以便提供良好的相等语法。查看:http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
因此,如果你想默认将其重写为"production“,你应该这样写:
Rails.env ||= ActiveSupport::StringInquirer.new('production')
但是,你必须检查哪个是Rails.env
的未初始化的值,我不确定它是不是真的是nil
。
IMO最好的做法是在您的所有脚本中添加env RAILS_ENV=production
。
发布于 2011-02-16 12:01:58
if Rails.env.production?
puts '...'
https://stackoverflow.com/questions/4017069
复制相似问题