使用capistrano多级更改独角兽端口

时间:2013-01-17 16:51:30

标签: ruby-on-rails ruby-on-rails-3 deployment capistrano 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)

如何根据环境更改端口?

泰!

3 个答案:

答案 0 :(得分:2)

尝试检查环境变量

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

希望有所帮助。