3

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

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

什么负责创建 unix 套接字?

4

2 回答 2

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 应用程序提供动态内容。

于 2012-11-15T08:21:56.340 回答
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;
    }

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

于 2012-11-15T18:58:32.780 回答