Heroku构建成功却遇Application Error,求排查提示
Heroku部署后Application Error(H20/R10/H10)排查思路
1. 先解决高频的R10(端口绑定超时)
- 强制使用Heroku提供的动态端口,绝对不能硬编码固定端口,
server.js里要这么写:const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); }); - 检查
Procfile的正确性:Web进程的启动命令必须准确,比如:
注意路径、文件名不能写错,也不要有多余空格。如果没写Procfile,Heroku会默认用web: node server.jsnpm start,所以要确保package.json里的scripts.start指向正确的启动文件。
2. 排查H10(应用崩溃)
- 拉取完整崩溃日志:执行
heroku logs --tail实时跟踪启动过程,重点看崩溃前的报错信息——大概率是依赖缺失、代码语法错误、数据库连接失败或者环境变量没配置。 - 本地模拟生产环境测试:设置
NODE_ENV=production后运行npm start,排查本地和Heroku环境的差异。比如如果用到了devDependencies里的包,必须移到dependencies,因为Heroku默认不会安装开发依赖。 - 确认
package.json的engines字段指定了兼容的Node.js版本,比如:
避免Heroku自动使用的Node版本和你的代码不兼容。"engines": { "node": "18.x" }
3. 处理H20(启动超时)
- 检查启动阶段的耗时操作:比如同步执行数据库迁移、加载大文件、调用外部API且无超时限制,这些都会让Heroku判定启动超时。建议把这类操作改成异步,或者放到服务启动后的初始化逻辑里。
- 确保服务启动后能快速响应健康检查:Heroku启动后会尝试访问你的服务,如果长时间无响应会触发H20,所以要保证启动逻辑简洁,优先让服务监听端口。
4. 验证Dynos计划变更的影响
- 查看当前Dynos配置:执行
heroku ps,确认Web Dyno的类型(免费/标准/性能)。如果是从高规格降到免费Dyno,可能因为内存/CPU不足导致启动失败或崩溃,可以临时升级到标准Dyno测试是否解决问题。 - 免费Dyno有休眠机制,长时间未访问后首次启动会变慢,但如果频繁出现超时,基本就是资源不够的问题。
额外检查
- 确认所有必要环境变量已配置:执行
heroku config,检查数据库URL、API密钥等关键变量是否存在,缺失环境变量是常见的崩溃原因。
内容的提问来源于stack exchange,提问作者L ' Labradon
相关产品推荐
相关产品推荐

