首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正确的Ruby on Rails 3替换了ENV["RAILS_ENV"] ||= 'production‘吗?

正确的Ruby on Rails 3替换了ENV["RAILS_ENV"] ||= 'production‘吗?
EN

Stack Overflow用户
提问于 2010-10-26 01:11:43
回答 2查看 19.8K关注 0票数 17

我们正在对Ruby on Rails 3进行升级(就像现在世界上一半的人一样),例如,我一直在努力替换RAILS_ENV的用法

代码语言:javascript
复制
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?

但我不太确定该怎么做:

代码语言:javascript
复制
ENV["RAILS_ENV"] ||= 'production'

我们把它放在一大堆Rake任务和守护进程的顶部,其想法是您可以在命令行上传递RAILS_ENV,但如果没有传递,它将缺省为“production”。

我不确定新的Rails3-合适的方式来做这件事。所以现在我的rails:upgrade:check强烈抱怨Rails2的入侵……

我不知道是否:

代码语言:javascript
复制
::Rails.env ||= 'production'

都会起作用的。

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

它是自动预先填充命令行中传递的RAILS_ENV的值,还是需要一种新的调用守护进程的方式?

正确的咒语是什么?

更新:

查看Rails.env的源代码,

代码语言:javascript
复制
def env
  @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end

我们可以推断出很多东西。

首先,看起来RAILS_ENV实际上仍然存在--这意味着它可以被设置,并且Rails.env会找到它……

如果Rails在守护进程的上下文中是有效的,那么就不需要再做任何事情了。如果没有-那么我就可以不太在意了,像以前一样使用旧的RAILS_ENV

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-15 06:44:16

Rails.env实际上是ActiveSupport::StringInquirer类型,它覆盖了method_missing,以便提供良好的相等语法。查看:http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html

因此,如果你想默认将其重写为"production“,你应该这样写:

代码语言:javascript
复制
Rails.env ||= ActiveSupport::StringInquirer.new('production')

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

IMO最好的做法是在您的所有脚本中添加env RAILS_ENV=production

票数 11
EN

Stack Overflow用户

发布于 2011-02-16 12:01:58

代码语言:javascript
复制
if Rails.env.production?
  puts '...'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4017069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档