ruby-on-rails - 正确的 Ruby on Rails 3 替换 ENV ["RAILS_ENV"] ||= 'production' ?

标签 ruby-on-rails ruby-on-rails-3

我们正在升级到 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像之前一样。

最佳答案

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

所以,如果你想通过默认将它覆盖为“生产”,你应该写:

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

但是,您必须检查 Rails.env 的未初始化值。 , 我不确定是不是真的 nil .

IMO 最好的做法是在前面加上 env RAILS_ENV=production到你所有的脚本。

关于ruby-on-rails - 正确的 Ruby on Rails 3 替换 ENV ["RAILS_ENV"] ||= 'production' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017069/

相关文章:

ruby-on-rails - Rails 按标题、正文和标签搜索帖子

ruby-on-rails - Rails 4.2.2-Windows 7/: bundle exec guard 的 git Bash 上未显示测试结果

ruby-on-rails - Rails 应用程序中的计算逻辑应该放在哪里?

ruby-on-rails - Rails 3 事件管理员。如何在 Active Admin 中的搜索中为六列使用一个字段?

jquery - 附加项目时同位素不会重新布局

ruby-on-rails - 如何在 Rails 中从名称字符串实例化类?

ruby-on-rails - rails : Is that safe to store data in "session"?

ruby-on-rails-3 - Rails i18n如何获取某个键的所有值?

javascript - 使 Rails 变量保持最新以供客户端使用

Jquery ajax 和 Rails 3 -> 加载内容