【问题标题】:Host multiple rails applications over subfolder using nginx+unicorn使用 nginx+unicorn 在子文件夹上托管多个 rails 应用程序
【发布时间】:2014-09-03 13:44:29
【问题描述】:

我想使用 nginx + unicorn 托管多个 Rails 应用程序,目前正在使用带有 railsbaseuri 的 apache + 乘客服务。唯一的原因是在部署每个新应用程序后都需要重新加载 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

【问题讨论】:

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


    【解决方案1】:

    一种方法是将 Rails 应用程序托管为 UDS。并且 nginx 有多个服务器块可以从每个 UDS(Unix 域套接字)读取。为语法错误编写逻辑即席赦免。

    例如看看这个。
    http://projects.puppetlabs.com/projects/1/wiki/using_unicorn

    您可以使用 app1.conf 为 unicorn 托管 app1,其中会有一行。

    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;
        }
      ....
    

    并根据位置或主机标头从服务器块路由请求(代理传递)

     server {
            listen 80;    
            location /app1 { 
                proxy_pass http://app1;
                proxy_redirect off; 
            } 
            location /app2 { 
                proxy_pass http://app2;
                proxy_redirect off; 
            } 
        }
    

    【讨论】:

    • 独角兽 app1.conf 的位置是什么。检查我用 unicorn.rb 文件更新的编辑。因此,正如您所说,我需要为每个应用程序拥有单独的 .conf 文件。多个 nginx 上游代码会进入 nginx.conf 或 default.conf 吗?。
    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多