Bolt-js开启Socket Mode部署到Heroku出现R10启动超时错误求助
Slack Bolt.js Socket模式部署Heroku R10报错解决方案
你遇到的报错:
2021-09-01T12:59:33.771745+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
错误根因
启用socketMode: true后,Bolt.js的app.start()方法不会启动HTTP服务器监听端口,仅会主动向外建立连接到Slack的WebSocket服务。而Heroku的web dyno强制要求进程必须在启动60秒内绑定$PORT监听HTTP请求,否则就会判定启动失败杀死进程。
你提到的文档描述不存在冲突:启用socketMode的Slack应用根本不需要接收外部主动发起的HTTP流量,所有和Slack的交互都通过客户端主动建立的长连接完成,完全符合worker dyno的使用场景。
具体解决步骤
- 第一步:修改项目根目录下的
Procfile,将启动命令前缀从web改为worker,示例:worker: node index.js - 第二步:修改Bolt应用启动代码,不需要传入
process.env.PORT参数,socket模式下app.start()不需要监听端口:await app.start() - 第三步:登录Heroku控制台,进入对应项目的「Resources」页面,将web dyno的实例数调整为0,将worker dyno的实例数调整为1,保存后重新部署应用即可。
特殊场景说明
如果你的应用除了Slack相关功能外,还需要对外提供HTTP接口服务,就不能使用socketMode,需要切换到Slack的HTTP事件订阅模式,继续使用web dyno,此时app.start(process.env.PORT)会正常启动HTTP服务器监听端口,就能通过Heroku的启动检测。
内容的提问来源于stack exchange,提问作者tovleeuw
相关产品推荐
相关产品推荐

