ruby-on-rails - 从 `rails server` 开始时,Puma 未在定义的位置创建套接字

标签 ruby-on-rails sockets nginx capistrano puma

我正在使用 nginx、puma 和 capistrano 部署我的 Rails 应用程序。它由名为 deploy 的用户部署。并且部署位置在主目录下( /home/deploy )

我已将 Puma 配置为在 shared 下创建套接字Capistrano 将其所有版本符号链接(symbolic link)到的文件夹。相应地,nginx 也被配置为查看该套接字(请参阅下面的配置文件)

但是,当我启动 Rails/Puma 网络服务器时 -

cd /home/deploy/my_app/current
SECRET_KEY_BASE=.... DATABASE_PASSWORD=... rails s -e production

我注意到没有创建套接字文件。当我在浏览器中访问该站点然后查看 Nginx 错误日志时,它还提示该套接字不存在。
2016/07/17 14:26:19 [crit] 26055#26055: *12 connect() to unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: XX.YY.XX.YY, server: localhost, request: "GET http://testp4.pospr.waw.pl/testproxy.php HTTP/1.1", upstream: "http://unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock:/500.html", host: "testp4.pospr.waw.pl"

我该如何让 puma 创建那个套接字?

谢谢!

彪马配置
# config/puma.rb

...

# `shared_dir` is the symlinked `shared/` directory created
# by Capistrano - `/home/deploy/my_app/shared`

# Set up socket location
bind "unix://#{shared_dir}/tmp/sockets/puma.sock"

# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true

# Set master PID and state locations
pidfile "#{shared_dir}/tmp/pids/puma.pid"
state_path "#{shared_dir}/tmp/pids/puma.state"
activate_control_app

...

Nginx 站点配置
# /etc/nginx/sites-available/default

upstream app {
    # Path to Puma SOCK file
    server unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock fail_timeout=0;
}

server {
    listen 80;
    server_name localhost;

    root /home/deploy/my_app/public;

    try_files $uri/index.html $uri @app;

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

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

最佳答案

你确定你正在使用该配置运行 Puma 吗?我不认为rails server是在生产环境中启动 Puma 的正确方法。

我会改用这个:

RACK_ENV=production bundle exec puma -C config/puma.rb

一旦你手动完成这项工作,然后使用 --daemon标志以保持服务器在后台运行。

另外,shared_dir 在哪里?在您的 config/puma.rb 中定义?也许您省略了文件的一部分,但如果没有,请确保插入正确的值。

关于ruby-on-rails - 从 `rails server` 开始时,Puma 未在定义的位置创建套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38424680/

相关文章:

linux - Linux 中的 TIPC 套接字类型

ruby-on-rails - 如何在 lib 模块中使用 url 助手,并为多个环境设置主机

ruby-on-rails - 从架构中删除时间戳记字段

python - 如何在python中终止正在运行的线程?

angular - 如何在 Kubernetes 中使用 nginx 连接前端和后端

linux - 尝试安装其他软件包时Nginx出现问题

nginx 位置匹配扩展中的正则表达式不带 "resolve"

ruby-on-rails - ActiveRecord多级单表继承查询

ruby-on-rails - HAML:form_tag困境(缩进?)

java - 使用 BouncycaSTLe 与 PSK 的 TLS 连接