【发布时间】:2026-02-07 20:20:19
【问题描述】:
我们正在升级到 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。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3