Heroku部署Node.js广播机器人失败,本地运行正常该如何解决?
Heroku 7*24小时广播机器人故障排查步骤
- 第一步:优先查看运行日志定位具体错误
本地运行正常线上出错的90%问题都能从日志里找到原因,直接在命令行执行heroku logs --tail -a 你的Heroku应用名称查看实时运行日志,重点排查三类报错:依赖包缺失、环境变量未配置、权限不足。很多人本地安装了全局依赖包,但是部署时没把所有依赖写到对应依赖清单(Python对应requirements.txt,Node.js对应package.json),线上启动时直接缺包报错。 - 第二步:修正进程配置类型
Heroku 默认的web类型进程要求必须绑定端口对外提供web服务,否则会在启动30秒后被系统强制杀死。你这个广播机器人不需要对外提供web服务,直接修改项目根目录下的Procfile文件,把原有的web: 启动命令改成worker: 启动命令,修改完成后到Heroku应用后台的「资源」页面,关闭web dyno,开启worker dyno即可。 - 第三步:处理dyno休眠问题
Heroku免费版dyno如果连续30分钟没有收到外部网络请求,就会自动进入休眠状态,7*24小时的广播任务自然会中断。要么升级到付费版dyno取消休眠限制,要么自己在代码里加个定时任务,每隔25分钟访问一次你的应用地址,保持dyno处于唤醒状态。 - 第四步:验证网络连通性
本地网络环境和Heroku服务器网络环境不一样,你广播用的目标链接可能在Heroku的网络下无法正常访问。可以在代码启动逻辑最前面加一段测试代码,先发起一次对目标链接的请求,把请求的状态码、返回结果输出到日志,就能快速确认是不是网络不通导致的故障。 - 第五步:检查资源使用超限问题
Heroku免费版dyno内存上限只有512MB,要是你的机器人运行时内存占用超过上限,就会被系统强制杀死。执行heroku ps -a 你的Heroku应用名称查看进程状态,如果出现R14、R15类报错或者进程反复crash,就说明是资源不够,要么优化代码降低内存占用,要么升级更高配置的dyno。
内容的提问来源于stack exchange,提问作者within holoder
相关产品推荐
相关产品推荐

