我们正在对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/

10-10 05:15