在rails中设置一个带有unicorn,nginx和capistrano的虚拟主机

时间:2012-11-20 09:10:27

标签: ruby-on-rails ruby-on-rails-3 nginx ruby-on-rails-3.2 capistrano

我已经能够使用nginx,unicorn和capistrano将我的rials应用程序部署到vps系统中,没有任何错误。现在,我想在同一个vps服务器内使用相同的nginx配置(下面的两个脚本)部署另一个rails应用程序,并在运行cap deploy之后:setup和cap deploy:cold它设置正确并且rails应用程序被发送到服务器。我得到的问题是这个。当我输入service nginx restart时,我收到以下错误

nginx: [emerg] duplicate upstream "unicorn" in /etc/nginx/sites-enabled/cf:1
nginx: configuration file /etc/nginx/nginx.conf test failed

我当前正在运行的第一个应用程序的nginx脚本是

upstream unicorn {
  server unix:/tmp/unicorn.cf.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name cfmagazineonline.com;
  root /home/deployer/apps/cf/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

我的第二个rails应用程序的nginx配置无法运行,但是第一个rails应用程序出现错误并使其崩溃

upstream unicorn {
  server unix:/tmp/unicorn.gutrees.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name gutrees.com;
  root /home/deployer/apps/gutrees/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

任何想法如何解决此问题并正确设置虚拟主机。谢谢

1 个答案:

答案 0 :(得分:10)

以不同方式命名您的第二个应用程序(上游名称必须是唯一的)。因此,而不是unicorn使用,即名称@my_shiny_app_server。然后使用此名称proxy_pass指令http://my_shiny_app_server。将my_shiny字符串替换为您应用的名称,例如gutreescf