正确的Ruby on Rails 3替换ENV [“RAILS_ENV”] || ='production'的方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

我们正在对Ruby on Rails 3进行升级,我一直在努力取代RAILS_ENV的使用,例如

RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?

但我不确定如何处理:

ENV["RAILS_ENV"] ||= 'production'

我们已经将它放在了一大堆Rake任务和守护进程的顶端,并且我们的想法是,可以传递RAILS_ENV命令行,但如果它没有通过,它将默认为“production”。

我不确定新的Rails3适合这样做的方式。所以现在我正在大量抱怨Rails2-ishness

我不知道是否:

::Rails.env ||= 'production'

能工作。

Rails.env在守护进程中是否存在?

它是否会自动预先填充通过命令行传递的RAILS_ENV的值,还是需要调用守护程序的新方法?

提问于
用户回答回答于

Rails.env实际上是类型的ActiveSupport::StringInquirermethod_missing为了提供很好的相等语法而重写。看看:api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html

所以,如果你想把它重写成“defaut”的“制作”,你应该写:

Rails.env ||= ActiveSupport::StringInquirer.new('production')

但是,必须检查哪些是未初始化的值Rails.env,我不确定它是否真的nil

最好的行动方式是IMO,只是env RAILS_ENV=production将所有脚本都加在一起。

用户回答回答于

编辑lib/tasks/environments.rake

# Sets environments as needed for rake tasks
%w[development production staging].each do |env|
  desc "Runs the following task in the #{env} environment" 
  task env do
    Rails.env = env
  end
end

task :testing do
  Rake::Task["test"].invoke
end

task :dev do
  Rake::Task["development"].invoke
end

task :prod do
  Rake::Task["production"].invoke
end

扫码关注云+社区