You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Nginx连接Puma套接字时的111: Connection refused错误?

解决Nginx连接Puma Socket被拒绝的问题

你的问题核心很明确:Puma已经优雅停止运行了,导致Nginx找不到可连接的后端服务,所以才会抛出「Connection refused」的错误。咱们一步步来排查修复:

1. 先确认Puma进程状态

先检查Puma是不是真的没在运行,执行这条命令:

ps aux | grep puma

如果输出里没有活跃的Puma进程,那首先得把它重启起来:

  • 如果你用Capistrano部署,直接用部署脚本重启最方便:
    cap production puma:restart
    
  • 要是没用Capistrano,就手动进入项目目录启动:
    cd /home/deploy/autostudy.cz/current
    bundle exec puma -C config/puma.rb -d
    
    (-d参数是让Puma后台运行,避免占用终端)

2. 检查Socket文件的权限与存在性

有时候Puma重启后,socket文件的权限不对,Nginx没有读写权限也会连不上。先看看socket文件是否存在:

ls -l /home/deploy/autostudy.cz/shared/tmp/sockets/autostudy-puma.sock
  • 如果文件存在:检查权限,确保Nginx的运行用户(一般是www-data或nginx)能读写。可以临时设置宽权限测试:
    chmod 666 /home/deploy/autostudy.cz/shared/tmp/sockets/autostudy-puma.sock
    
    要是测试有效,后续可以改成更安全的方式——让Puma和Nginx归属同一个用户组,再设置组读写权限。
  • 如果文件不存在:说明Puma启动失败了,得去看puma.error.log里的详细报错,比如是不是依赖缺失、数据库连接失败、配置语法错误之类的。

3. 核对Nginx与Puma的Socket路径一致性

打开你的Nginx配置文件,找到upstream块,确认里面的socket路径和Puma配置文件(config/puma.rb)里的bind配置完全一致:
比如Nginx里应该是这样:

upstream autostudy {
  server unix:///home/deploy/autostudy.cz/shared/tmp/sockets/autostudy-puma.sock fail_timeout=0;
}

Puma的config/puma.rb里对应的配置要一模一样:

bind "unix:///home/deploy/autostudy.cz/shared/tmp/sockets/autostudy-puma.sock"

路径哪怕差一个字符、一个斜杠都会出问题,一定要仔细核对。

4. 重启Nginx确保配置生效

不管有没有修改Nginx配置,重启一下让它刷新后端连接状态:

sudo systemctl restart nginx

要是用的是旧系统,也可以用这条命令:

sudo service nginx restart

5. 排查Puma启动失败的深层原因

如果Puma反复启动失败,重点深挖puma.error.log里的报错信息,常见坑点包括:

  • 项目的current软链接指向错误,导致Puma找不到正确的代码目录
  • config/database.yml里的生产环境数据库配置有误(比如密码不对、数据库未创建)
  • 生产环境变量缺失(比如RAILS_ENV=production没设置,或者密钥没配置)
  • 项目依赖未安装完全,可以重新执行bundle install --without development test安装生产环境依赖

要是按上面的步骤走还是解决不了,可以把Puma日志里的具体错误内容贴出来,能更精准定位问题。

内容的提问来源于stack exchange,提问作者tandem tour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:15