我正在使用 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/