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

AWS Elastic Beanstalk AL2部署Ruby2.7.4(Rails6)应用无法访问排查

问题排查方向与根因分析

核心排查方向

  • 首先排查Puma套接字文件的生成状态:登录EB实例检查/var/run/puma/my_app.sock是否存在,文件权限、属主是否正常,新环境直接部署时该目录大概率不存在或无写入权限
  • 检查Nginx错误日志:查看/var/log/nginx/error.log是否存在connect() to unix:///var/run/puma/my_app.sock failed类报错
  • 检查Puma运行日志:查看/var/log/puma/puma.log是否存在套接字绑定失败、目录不存在的报错
  • 检查/var/run/puma/目录的权限与归属:新环境默认不会创建该目录,官方示例应用部署时会初始化该目录,这也是先部署示例再部署你的应用能正常运行的核心原因
  • 验证Puma配置冲突:你的Puma配置存在明显的参数定义错误

确定根因

  1. Puma配置错误:你在Puma配置中错误将套接字路径设置为pidfile路径:
bind "unix:///var/run/puma/my_app.sock"
pidfile "/var/run/puma/my_app.sock" # 错误!pidfile是进程ID存储文件,不能和套接字文件路径一致,会导致套接字被覆盖无法监听

同时配置存在重复pidfile定义,后续又指定pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" },会导致Puma启动时的文件写入冲突。

  1. 新环境缺少/var/run/puma/目录:AWS Elastic Beanstalk Ruby 2.7 平台默认不会主动创建/var/run/puma/目录,你的应用直接部署时Puma无法在不存在的目录下创建套接字文件,导致Nginx转发请求时找不到上游服务,无内容返回。而先部署官方示例Rails应用时,示例的部署脚本会自动创建该目录并配置正确权限,后续再部署你的应用时目录已经存在,所以可以正常运行。

  2. Nginx重载时机问题:你的.ebextensions/nginx.config中的010_reload_nginx命令是在容器命令阶段执行,此时如果Puma还未完成启动、套接字还未生成,Nginx重载后也会出现上游找不到的问题。

修复方案

  1. 修正Puma配置:删除错误的pidfile定义,只保留正确的pidfile配置:
# 删掉这行错误配置 pidfile "/var/run/puma/my_app.sock"
bind "unix:///var/run/puma/my_app.sock"
# 仅保留这一处pidfile定义即可
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
  1. 在.ebextensions中新增目录初始化配置:在nginx.config中新增commands段,提前创建/var/run/puma/目录并配置正确权限:
commands:
  00_create_puma_dir:
    command: "mkdir -p /var/run/puma && chown webapp:webapp /var/run/puma"
# 保留原有的files、container_commands配置不变
  1. 可选:移除Nginx强制跳转逻辑测试:排查初期可以临时注释HTTPS跳转逻辑,排除证书、跳转链导致的无返回问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:42:00