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

如何修复Ruby on Rails应用在Heroku上的H10应用崩溃错误?

Rails应用Heroku部署后崩溃(H10错误)排查方案

问题概述

本地运行正常的Rails 7.0.7应用,部署到Heroku后触发H10崩溃错误,日志显示请求/cable后应用状态从up变为crashed。已尝试重启dyno、校验storage.yml格式、调整Procfile配置,但问题未解决。

关键日志信息

2023-10-30T14:40:44.484063+00:00 heroku[web.1]: State changed from up to crashed
2023-10-30T14:40:44.378048+00:00 heroku[router]: at=info method=GET path="/cable" host=j-a-m-1f39b9aba9a4.herokuapp.com request_id=2b4b5435-b40a-431c-b48f-1159fa5fd7fb fwd="86.182.36.176" dyno=web.1 connect=0ms service=107ms status=101 bytes=174 protocol=https
2023-10-30T14:41:19.466343+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/cable" host=j-a-m-1f39b9aba9a4.herokuapp.com request_id=41cf02af-42a1-43b5-9ac8-7d6fbf8ac59f fwd="86.182.36.176" dyno= connect= service= status=503 bytes= protocol=https

已执行操作

  • 多次重启Heroku应用及Web dyno
  • 确认storage.yml格式正确
  • 检查Heroku控制台未发现明显错误
  • 调整Procfile配置后问题依旧

针对性排查与修复步骤

1. 校验Action Cable的Redis配置

从Gemfile看生产环境已引入redis gem,但需确保Action Cable适配器配置正确:

  • 打开config/cable.yml,确认生产环境指向Heroku Redis实例:
production:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: your_app_name_production
  • 执行heroku addons确认已添加Redis插件,未添加则执行:heroku addons:create heroku-redis:hobby-dev

2. 验证数据库配置

确保config/database.yml生产环境配置依赖Heroku环境变量:

production:
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  url: <%= ENV.fetch("DATABASE_URL") %>
  • 执行heroku run rails db:migrate确保数据库迁移完成,避免启动时因表缺失崩溃

3. 获取完整崩溃日志

当前日志仅显示状态变化,需定位具体崩溃原因:

  • 执行heroku logs --tail实时查看日志,重启应用后观察启动阶段报错
  • 执行heroku logs --ps web.1查看web进程完整日志,排查依赖缺失、配置错误或代码异常

4. 检查Puma配置

Procfile使用bundle exec puma -C config/puma.rb,需确认config/puma.rb适配Heroku环境:

  • 确保端口监听使用Heroku提供的环境变量:
port        ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
  • 避免设置超出Hobby dyno资源限制的线程数、进程数

5. 确认依赖安装完整性

执行heroku run bundle check检查生产环境依赖是否全部安装,若有缺失则重置buildpack后重新部署:

git add .
git commit -m "Fix dependency issues"
git push heroku main

6. 排查Cloudinary配置

虽然已确认storage.yml,但需确保Heroku环境变量正确设置:

  • 执行heroku config查看是否存在CLOUDINARY_URL,缺失则添加:heroku config:set CLOUDINARY_URL=your_cloudinary_url

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:59:53