代码之家  ›  专栏  ›  技术社区  ›  Taryn East

是否将ruby on rails 3替换为env[“rails_env”]=“production”?

  •  17
  • Taryn East  · 技术社区  · 14 年前

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

    RAILS_ENV == 'wibble'
    # becomes
    Rails.env.wibble?
    

    但我不太确定该怎么办:

    ENV["RAILS_ENV"] ||= 'production'
    

    我们把它放在一堆 Rake 任务和守护进程,您可以通过 RAILS_ENV 在命令行上,但如果未通过,则默认为“生产”。

    我不确定新铁路3是否适合这样做。所以现在我的 rails:upgrade:check 正在强烈地抱怨铁路的这种入侵…

    我不知道是否:

    ::Rails.env ||= 'production'
    

    会有用的。

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

    它是否自动地预先填充了在命令行上传递的rails-env的值,或者我们是否需要一种调用守护进程的新方法?

    正确的咒语是什么?


    更新:

    正在查找的源代码 轨道.env ,

    def env
      @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
    end
    

    我们可以推断出许多事情。

    首先,看起来 轨道环境 是否仍然存在-这意味着它可以被设置并且 轨道.env 会找到它的…

    如果rails在守护进程的上下文中有效,那么就不需要再做任何事情。如果不是-那我就不能太在乎和使用旧的 轨道环境 和以前一样。

    3 回复  |  直到 12 年前
        1
  •  11
  •   Fábio Batista Raza Ahmed    14 年前

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

    因此,如果您想通过涂改将其重写为“生产”,您应该写:

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

    但是,您必须检查哪个值是 轨道.env 我不确定 nil .

    在我看来,最好的做法就是提前做好准备 env RAILS_ENV=production 所有脚本。

        2
  •  9
  •   Community CDub    7 年前

    编辑 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
    

    Source

    更新

    pass RAILS_ENV=production 通过命令行,如下所示:

    RAILS_ENV=production rake db:setup

    this 帮助:

    # before
    if RAILS_ENV == 'production'
      ...
    
    # Rails 3
    if Rails.env.production?
    
        3
  •  2
  •   Quanyi Ma    14 年前
    if Rails.env.production?
      puts '...'