Rails / Unicorn deploy:创建Unix套接字的原因是什么?

时间:2012-11-15 07:49:20

标签: ruby-on-rails unicorn upstart foreman

我正在使用Capistrano / Unicorn / Foreman / Upstart部署Rails 2.3 // Spree应用程序。

我无法弄清楚的部分是如何让foreman / upstart进程管理自动创建/myapp/shared/sockets/unicorn.sock(至少我认为unix套接字应该来自它们)。

负责创建unix套接字的是什么?

2 个答案:

答案 0 :(得分:1)

假设你的配置是nginx + unicorn。您可能知道,在配置目录中,您应该创建一个名为unicorn.rb的文件。在这个文件中有一个如何处理非静态请求的描述,如下所示:

upstream unicapd {
  server unix:/tmp/capd.sock fail_timeout=0;
}

我的上游命名与教程中所述的不同,这使我能够在同一主机上托管多个不同的应用程序。

然后,在Nginx配置的vhosts目录中你输入这样的东西(假设你的主机文件是'vhosts / myconf.conf':

location @unicorn1 {
proxy_pass http://unicapd;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
   }

在这里,您可以看到nginx提供来自该地点的非静态请求的指令,名为“http:// unicapd”,它与您的unicorn.rb配置文件相关。此配置由一个文件触发,该文件位于init.d(如果您正在运行Debian)目录中。

总结:当你说bundle exec unicorn --restart时,init.d中的脚本触发代码,形成一个“特殊”文件/tmp/capd.sock,它为你的Rails应用程序提供动态内容。

答案 1 :(得分:0)

unicorn配置中配置的unix-socket的路径:
...
listen "/home/user/app/shared/sockets/unicorn.sock", :backlog => 64
...

然后在nginx.conf中:

    location / {
            try_files $uri @unicorn;
            proxy_cache cache;
            proxy_cache_valid 10m;
    }        
    location @unicorn {
            proxy_set_header  Client-Ip $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header  Host $host;
            proxy_pass  http://unix:/home/user/apps/shared/sockets/unicorn.sock;
    }

当应用程序启动时,unicorn在设置路径中创建套接字文件(用户必须具有对此路径的写入权限)