Rails 7生产环境蓝屏错误排查求助(Dokku部署)
Rails 7 + Dokku 蓝屏错误排查建议
1. 确认Rails错误输出配置生效
虽然你已设置config.consider_all_requests_local = true,但要确保是在production环境配置文件(config/environments/production.rb)中修改的,且部署时该文件已正确推送。临时添加config.action_dispatch.show_exceptions = false到production配置里,强制页面显示错误栈(排查完成后务必改回,避免泄露敏感信息)。
2. 修正Rails日志输出到标准流
部分情况下Rails日志未正确输出到stdout/stderr,导致Dokku日志无法捕获。修改config/production.rb的日志配置:
config.logger = ActiveSupport::Logger.new(STDOUT) config.log_level = :debug config.log_tags = [:subdomain, :uuid]
重新部署后,用dokku logs my-app-name -t实时跟踪日志,触发错误页面,观察是否有新日志输出。
3. 验证资产预编译完整性
Rails 7默认的importmap/jsbundling/cssbundling可能出现预编译遗漏,导致页面加载失败触发500:
- 执行
dokku logs my-app-name | grep assets,检查预编译过程是否有报错 - 进入容器查看资产文件:
dokku run my-app-name ls public/assets,确认报错页面依赖的css/js文件存在 - 若用importmap,检查
config/importmap.rb的依赖是否正确,部署时是否执行了bin/importmap pin
4. 排查数据库数据与连接问题
部分页面报错可能源于数据库数据缺失或连接异常:
- 进入容器启动production控制台:
dokku run my-app-name rails c production,手动查询报错页面用到的模型数据,确认无缺失或异常 - 检查数据库连接配置:
dokku config:get my-app-name DATABASE_URL,确认格式正确;若用PostgreSQL,执行dokku postgres:info my-db-name检查服务状态
5. 检查Nginx静态文件处理规则
Nginx无法找到静态文件可能返回500但日志无记录:
- 查看Dokku生成的Nginx配置:
dokku nginx:show-config my-app-name,确认root指向正确的public目录 - 临时关闭静态文件缓存,在Nginx配置中添加:
location ~ ^/assets/ { expires -1; add_header Cache-Control no-cache; }
执行dokku nginx:reload后重新测试
6. 核对环境变量与文件权限
- 执行
dokku config:show my-app-name,确认SECRET_KEY_BASE、第三方API密钥等必要环境变量无缺失 - 检查容器内文件权限:
dokku run my-app-name ls -l public,确保public目录及子文件权限为www-data可读写
7. 逐步定位代码问题
创建极简测试页面(仅输出简单文本),确认能正常访问后,逐步添加报错页面的代码逻辑,直到触发错误,以此定位具体的代码问题点
内容的提问来源于stack exchange,提问作者user984621
相关产品推荐
相关产品推荐

