【问题标题】:Change unicorn ports using capistrano multistage使用 capistrano 多级更改独角兽端口
【发布时间】:2013-01-17 16:51:30
【问题描述】:

我需要根据环境设置独角兽的端口。像这样的:

#config/unicorn.rb

if Rails.env.production?
  listen 8080, :tcp_nopush => true
elsif Rails.env.staging?
  listen 3001, :tcp_nopush => true
end

以上代码返回此错误:

[out :: 172.30.1.24] config/unicorn.rb:32:in `reload': uninitialized constant Unicorn::Configurator::Rails (NameError)

如何根据环境改变端口?

泰!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 deployment capistrano unicorn


    【解决方案1】:

    尝试检查环境变量

    environment = ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'production'
    

    【讨论】:

      【解决方案2】:

      您需要加载 Rails 环境才能访问 Rails.env:

      # config/unicorn.rb
      require File.dirname(__FILE__)+'/application'
      
      port = case Rails.env
        when 'production' then 8080
        when 'staging'    then 3001
        else 3000
      end
      
      listen port, :tcp_nopush => true
      

      【讨论】:

      • config/unicorn.rb:34:in require' ** [out :: 172.30.1.24] : cannot load such file -- config/environment (LoadError) ** [out :: 172.30.1.24] from config/unicorn.rb:34:in reload'
      • @Rodrigo 抱歉,这些天我仍然坚持使用 Rails 2。在 Rails 3 中需要“应用程序”。答案已更新。
      • cannot load such file -- config/application
      【解决方案3】:

      看起来您可能遇到了命名空间查找问题。您的代码正在Unicorn::Configurator 的上下文中进行评估,并且您在条件(if Rails.env 部分)中有一个Rails 的“裸字常量查找”。您可以改为使用 ::Rails 强制进行顶级查找:

      if ::Rails.env.production?
        # etc.
      end
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多