Ruby on rails 正确的Ruby on Rails 3替换为ENV[“Rails_ENV”]| |=';生产';?
我们正在升级RubyonRails3(就像现在世界的一半),例如,我一直在努力替换Rails_ENV的用法Ruby on rails 正确的Ruby on Rails 3替换为ENV[“Rails_ENV”]| |=';生产';?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我们正在升级RubyonRails3(就像现在世界的一半),例如,我一直在努力替换Rails_ENV的用法 RAILS_ENV == 'wibble' # becomes Rails.env.wibble? 但我不确定该怎么办: ENV["RAILS_ENV"] ||= 'production' 我们把它放在一大堆任务和守护进程的顶端,其思想是您可以在命令行上传递RAILS\u ENV,但如果没有传递,它默认为“production” 我不确定新铁路是否适合这样做。所以现在我的rails:u
RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?
但我不确定该怎么办:
ENV["RAILS_ENV"] ||= 'production'
我们把它放在一大堆任务和守护进程的顶端,其思想是您可以在命令行上传递RAILS\u ENV
,但如果没有传递,它默认为“production”
我不确定新铁路是否适合这样做。所以现在我的rails:upgrade:check
强烈抱怨Rails2的入侵
我不知道:
::Rails.env ||= 'production'
会有用的
守护进程中是否存在Rails.env
它是否自动地预先填充了通过命令行传递的RAILS_ENV的值,还是需要一种调用守护进程的新方法
正确的咒语是什么
更新: 查看
Rails.env
的源代码
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
我们可以推断出许多事情
首先,看起来RAILS\u ENV
实际上仍然存在-这意味着可以设置它,并且RAILS.ENV
会找到它
如果Rails在守护进程的上下文中是有效的,那么就不需要做更多的事情了。如果不是,那么我就不会太在意,像以前一样使用旧的
RAILS\u ENV
。编辑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
更新
RAILS\u ENV=production
通过命令行,如下所示:
RAILS\u ENV=production rake db:setup
有助于:
Rails.env
实际上是类型ActiveSupport::StringInquirer
,它重写方法\u missing
,以提供良好的相等语法。检查:
因此,如果您想通过defaut将其覆盖为“生产”,您应该写:
Rails.env ||= ActiveSupport::StringInquirer.new('production')
但是,您必须检查哪个是Rails.env
的未初始化值,我不确定它是否真的是nil
最好的做法,依我看,就是在你所有的脚本前加上
env RAILS\u env=production
。好的,请原谅我的无知:1)你会如何调用任务,2)这会如何影响守护进程(在我们的例子中,守护进程不是通过rake调用的)。哦。。。这一解决方案如何满足我们的需求,即“如果在命令行上没有传递任何内容,则默认为生产,但如果在命令行上传递了某些内容,则允许我们覆盖它”?Hiya-是的,这说明了如何使用rake任务。。。但是我们的守护进程呢?好的,深入查看您获取此代码的帖子-我不得不说,它可能根本不适合我。您借用的environment.rake代码-来自某人的自定义rake环境。它只涉及为rake任务设置环境。您提供的第二段代码直接来自我已经使用过的文档。正如我指定的-我已经更新了我们的代码,在我们所有的常规代码中使用Rails.env而不是Rails_env。啊-现在这很有用,所以“env(Rails_env)”是您现在手动设置和环境变量的方式吗?g刚刚查看了Rails.env的源代码-现在添加到问题中…恐怕您误解了要求。我不想知道我是否在生产环境中。默认情况下,我希望强制脚本在生产环境中运行。
if Rails.env.production?
puts '...'
if Rails.env.production?
puts '...'