我们正在升级到 Ruby on Rails 3(就像现在世界的一半),并且我一直在努力替换 RAILS_ENV 的用法,例如
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?
但我不确定该怎么做:
ENV["RAILS_ENV"] ||= 'production'
我们把它放在一大堆 Rake 的顶部。任务和守护进程,想法是你可以通过
RAILS_ENV
在命令行上,但如果未通过,则默认为“生产”。我不确定新的适用于 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
所以,如果你想通过默认将它覆盖为“生产”,你应该写:
Rails.env ||= ActiveSupport::StringInquirer.new('production')
但是,您必须检查
Rails.env
的未初始化值。 , 我不确定是不是真的 nil
.IMO 最好的做法是在前面加上
env RAILS_ENV=production
到你所有的脚本。
关于ruby-on-rails - 正确的 Ruby on Rails 3 替换 ENV ["RAILS_ENV"] ||= 'production' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017069/