正确的 Ruby on Rails 3 替换 ENV[“RAILS_ENV"] ||= 'production'? [英] Correct Ruby on Rails 3 replacement for ENV["RAILS_ENV"] ||= 'production'?
问题描述
我们正在升级到 Ruby on Rails 3(就像现在的半个世界),我一直在努力替换 RAILS_ENV 的用法,例如
We're doing an upgrade to Ruby on Rails 3 (like half the world right now), and I've been diligently replacing usages of RAILS_ENV, for example
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?
但我不确定要做什么:
ENV["RAILS_ENV"] ||= 'production'
我们在一大堆Rake任务和守护进程,其想法是您可以在命令行上传递 RAILS_ENV
,但如果未通过,则默认为生产".
We've got it at the top of a whole bunch of Rake tasks and daemons, and the idea is that you can pass RAILS_ENV
on the command-line, but it defaults to 'production' if it's not passed.
我不确定适用于 Rails3 的新方法.所以现在我的 rails:upgrade:check
强烈抱怨 Rails2-ishness 的这种入侵......
I'm not sure of the new Rails3-appropriate way of doing this. So for now my rails:upgrade:check
is complaining mightily of this intrusion of Rails2-ishness...
我不知道:
::Rails.env ||= 'production'
会起作用.
Rails.env
是否存在于守护进程中?
Does Rails.env
exist in a daemon?
它是否会自动使用在命令行上传递的 RAILS_ENV 值进行预填充,或者我们是否需要一种调用守护进程的新方法?
Does it automagickally get pre-populated with the value of RAILS_ENV passed on the command-line or do we need a new way of invoking the daemons?
正确的咒语是什么?
更新:
查看 Rails.env
的源代码,
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
我们可以推断出很多事情.
we can deduce a number of things.
首先,看起来 RAILS_ENV
确实仍然存在 - 这意味着它可以被设置并且 Rails.env
会找到它...
Firstly, it looks like RAILS_ENV
does actually still exist - which means it can be set and Rails.env
will find it...
如果 Rails 在守护进程的上下文中有效,那么就无需再做任何事情了.如果没有 - 那么我就可以不在乎并像以前一样使用旧的 RAILS_ENV
.
If Rails is valid in the context of a daemon, then nothing more needs to be done. If not - then I could just not care much and use the old RAILS_ENV
as before.
推荐答案
Rails.env
实际上是 ActiveSupport::StringInquirer
类型,它覆盖了 method_missing
以提供良好的相等语法.检查:http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html一个>
Rails.env
is actually of type ActiveSupport::StringInquirer
, which overrides method_missing
in order to provide that nice equality syntax. Check: http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
因此,如果您想将其覆盖为默认的生产",您应该编写:
So, if you want to override it to be "production" by defaut, you should write:
Rails.env ||= ActiveSupport::StringInquirer.new('production')
但是,您必须检查哪个是 Rails.env
的未初始化值,我不确定它是否真的 nil
.
However, you'll have to check which is the uninitialized value of Rails.env
, I'm not sure it's really nil
.
IMO,最好的做法是将 env RAILS_ENV=production
添加到所有脚本中.
The best course of action, IMO, is to just prepend env RAILS_ENV=production
to all your scripts.
这篇关于正确的 Ruby on Rails 3 替换 ENV[“RAILS_ENV"] ||= 'production'?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!