Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 正确的Ruby on Rails 3替换为ENV[“Rails_ENV”]| |=';生产';?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 正确的Ruby on Rails 3替换为ENV[“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

我们正在升级RubyonRails3(就像现在世界的一半),例如,我一直在努力替换Rails_ENV的用法

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 '...'