Ruby on rails 使用capistrano多级更改unicorn端口

Ruby on rails 使用capistrano多级更改unicorn端口,ruby-on-rails,ruby-on-rails-3,deployment,capistrano,unicorn,Ruby On Rails,Ruby On Rails 3,Deployment,Capistrano,Unicorn,我需要根据环境设置unicorn的端口。大概是这样的: #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': unini

我需要根据环境设置unicorn的端口。大概是这样的:

#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)
如何根据环境改变端口


尝试检查环境变量

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

您需要加载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

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

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

希望有帮助。

config/unicorn.rb:34:in
require'**[out::172.30.1.24]:无法从config/unicorn.rb:34:in
reload'@Rodrigo抱歉,我这些天仍然在使用Rails 2。在Rails 3中需要“应用程序”。答案已更新。
无法加载此类文件--config/application