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

Rails应用部署至AWS EC2生产环境后无法定位错误日志求助

排查Rails生产环境经典错误页面的建议

针对你遇到的问题——本地运行正常但AWS EC2生产环境出现Rails经典错误页面,且日志未捕获详细错误,结合nginx的upstream prematurely closed connection提示,我整理了以下排查步骤:

1. 调整Rails日志级别以捕获详细错误

你当前的config.log_level = :info会过滤掉debug和error级别的详细信息,建议临时修改生产环境配置:

  • 打开config/environments/production.rb,将config.log_level = :info改为config.log_level = :debug
  • 重启Unicorn服务器(比如service unicorn_myapp restart,具体命令根据你的部署脚本调整)
  • 再次访问出错的页面,然后查看log/production.log,此时应该会记录更详细的错误堆栈信息

2. 检查Unicorn的专属日志

nginx提示上游连接提前关闭,大概率是Unicorn进程在处理请求时出错或崩溃了,而Unicorn有自己的独立日志:

  • 通常Unicorn的错误日志会存放在log/unicorn.stderr.log,标准输出日志在log/unicorn.stdout.log
  • 如果你的Unicorn配置文件(比如config/unicorn.rb)指定了自定义日志路径,去对应位置查看
  • 这里很可能会找到Rails进程崩溃的具体原因,比如资产预编译失败、依赖缺失、内存不足等

3. 验证资产预编译是否成功

你怀疑错误与资源预编译有关,可以按以下步骤验证:

  • 在生产环境服务器上执行预编译命令:
    RAILS_ENV=production bundle exec rake assets:precompile
    
  • 检查public/assets目录下是否存在你新增的HTML/图片对应的编译后文件(注意Rails会给资产加哈希后缀)
  • 确保public/assets目录的权限正确,nginx运行用户(通常是www-data)有读取权限:
    chmod -R 755 public/assets
    chown -R www-data:www-data public/assets
    

4. 临时开启本地调试模式(仅限测试)

如果日志还是没找到问题,可以临时让生产环境显示详细错误页面(注意测试后立即改回,避免安全风险):

  • 修改config/environments/production.rb:
    config.consider_all_requests_local = true
    config.action_dispatch.show_exceptions = true
    
  • 重启服务器后访问页面,此时会直接显示完整的错误堆栈,能快速定位问题

5. 检查系统级日志与资源限制

有时候进程崩溃是系统级问题,比如内存不足被OOM Killer终止:

  • 查看系统日志(Ubuntu/Debian是/var/log/syslog,CentOS是/var/log/messages),搜索unicorn或ruby相关的条目,看是否有进程被kill的记录
  • 检查EC2实例的内存使用情况,执行free -h或top命令,确认是否内存不足导致Unicorn进程崩溃

6. 验证Rollbar配置是否生效

如果Rollbar没捕获到错误,可能是配置问题:

  • 打开config/initializers/rollbar.rb,确认生产环境下Rollbar已启用:
    Rollbar.configure do |config|
      config.enabled = true if Rails.env.production?
      # 确认access token已正确配置
    end
    
  • 可以手动测试Rollbar是否能发送错误,在生产环境控制台执行:
    Rollbar.error("Test error from production")
    
    然后查看Rollbar后台是否收到这条测试错误

7. 检查服务器权限与临时目录

Unicorn需要读写临时目录来运行,权限不足也会导致连接问题:

  • 确保tmp/sockets、tmp/pids、tmp/cache目录存在且权限正确:
    mkdir -p tmp/sockets tmp/pids tmp/cache
    chmod -R 775 tmp
    chown -R deploy:deploy tmp # 这里的deploy是你运行Unicorn的用户,根据实际情况调整
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:03:54