23

我已按照此链接使用 puma 配置 nginx,但是当我使用它启动服务器时
bundle exec puma -e development -b unix:///var/run/my_app.sock
会抛出Permission denied - "/var/run/my_app.sock" (Errno::EACCES) error.

但是当我用bundle exec puma -e development
它启动服务器时 tcp://0.0.0.0:9292

my_app.sock file does not exist in /var/run/

如何使用 unix socket 启动服务器并通过my_app.conf文件中给出的域名访问应用程序。

你能请任何人帮助我吗?

4

1 回答 1

35

要使用套接字绑定启动 puma,只需使用/tmp目录:

bundle exec puma -e development -b unix:///tmp/my_app.sock

要通过域名访问应用程序,您应该使用类似的东西nginx并对其进行配置。

nginx在 Ubuntu 中安装,只需运行下一个命令:

sudo apt-get install nginx

运行sudo nano /etc/nginx/sites-available/my_app.conf并将下面的配置放入此文件(Ctrl + X,Y - 保存更改):

upstream my_app {
  server              unix:///tmp/my_app.sock;
}

server {
  listen              *:80;
  server_name         my_app.com;

  access_log          /var/log/nginx/my_app-access.log;

  location /favicon.ico {
    root              /var/www/my_app/public/assets/favicon.ico;
    gzip_static       on;
    expires           max;
    add_header        Cache-Control public;
  }

  location / {
    root              /var/www/my_app/public;
    try_files         $uri @app;
    gzip_static       on;
    expires           max;
    add_header        Cache-Control public;
  }

  location @app {
    proxy_pass        http://my_app;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto http;
    proxy_set_header  Host $http_host;
    proxy_redirect    off;
    proxy_next_upstream error timeout invalid_header http_502;
  }   
}

您应该将/var/www/my_app和更改my_app.com为适当的值。

将符号链接添加到启用的站点sudo ln -fns /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/

重启 nginx: sudo service nginx restart

将您的域名链接到服务器 IP(通过hosts-file 或 DNS-provider)。

于 2013-07-03T14:54:52.023 回答