使用nginx + unicorn在子文件夹上托管多个rails应用程序

时间:2014-09-03 13:44:30

标签: ruby-on-rails-3 nginx ubuntu-12.04 unicorn

我想使用nginx + unicorn托管多个rails应用程序,目前正在使用带有railsbaseuri的apache + passenger服务。唯一的原因是在部署每个新应用程序后需要重新加载apache。我想知道是否可以在unicorn + nginx中添加新应用程序而无需重新加载服务器。

我想在子文件夹上部署应用程序,如host-name / nginx-app1,host-name / nginx-app2,而host-name指向基本的html页面。

阅读与使用套接字处理单个应用程序相关的地方,并寻求一些帮助来实现这一点。在我的情况下,应用程序只部署一次,没有进一步的迭代。部署新应用程序后,应该没有停机时间以使当前应用程序运行。

修改 应用程序内的config / unicorn.rb文件。

    working_directory "/home/ubuntu/application_1"
    pid "/home/ubuntu/application_1/pids/unicorn.pid"
    stderr_path "/home/ubuntu/application_1/log/unicorn.log"
    stdout_path "/home/ubuntu/application_1/log/unicorn.log"
    listen "/tmp/unicorn.todo.sock"
    worker_processes 2
    timeout 30

1 个答案:

答案 0 :(得分:1)

实现这一目标的一种方法是将rails应用程序托管为UDS。并且nginx有多个服务器块可以从每个UDS(Unix域套接字)读取。为语法错误编写逻辑adhoc pardon。

e.g。看看这个。
http://projects.puppetlabs.com/projects/1/wiki/using_unicorn

你可以使用app1.conf托管app1 for unicorn,它将有一行。

listen '/var/run/app1.sock', :backlog => 512

并且有多个nginx上游,如

upstream app1 {
        server unix:/var/run/app1.sock fail_timeout=0;
    }
upstream app2 {
        server unix:/var/run/app2.sock fail_timeout=0;
    }
  ....

并根据位置或主机头

从服务器块路由请求(proxypass)
 server {
        listen 80;    
        location /app1 { 
            proxy_pass http://app1;
            proxy_redirect off; 
        } 
        location /app2 { 
            proxy_pass http://app2;
            proxy_redirect off; 
        } 
    }