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

基于Gradle与Spring Boot的Java Discord Bot部署Heroku时遭遇Error R10(启动超时)问题求助

搞定Heroku部署Discord Bot的Error R10问题

嘿,我一眼就看出问题出在哪了——你用错了Heroku的进程类型!

你的Discord Bot是个后台长期运行的服务,根本不需要监听HTTP端口,但你当前的Procfile用了web类型,Heroku对web进程有硬性要求:必须在90秒内绑定到$PORT环境变量指定的端口,不然就会触发R10超时杀进程。这就是为什么本地跑没问题,一上Heroku就挂的原因。

下面是具体的解决步骤,跟着做就行:

1. 把Procfile里的进程类型改成worker

原来的Procfile是给Web应用准备的,直接改成worker类型:

worker: java $JAVA_OPTS -jar build/libs/*.jar

这样Heroku就不会逼你的Bot绑定端口了,安心让它后台跑就行。

2. 去Heroku控制台开Worker Dyno

改完Procfile部署后,还得去Heroku后台开Worker进程:

  • 打开你应用的「Resources」页面
  • 找到Worker那一行,把开关打开(默认可能是关的)
  • 顺便把Web Dyno的开关关掉吧,留着也是浪费资源

3. 代码小优化(可选,但更规范)

你的代码里用了不少block()同步等待,虽然不是导致R10的直接原因,但在Reactor生态里更推荐用非阻塞的方式。比如把最后一行的:

client.onDisconnect().block();

换成:

client.onDisconnect().blockLast();

这样更符合Reactor的最佳实践,不过不改也能跑,看你自己需求。

再啰嗦两句为啥之前会错

Heroku的web进程是给Spring Boot Web应用这类需要对外提供HTTP服务的程序设计的,所以强制要求绑定端口。而你的Discord Bot只需要和Discord的网关保持连接,完全不需要开HTTP端口,用worker进程类型才是正确的选择。

另外,确认下你的Gradle构建确实把可执行jar包生成在build/libs/目录下了,如果有多个jar,最好写具体的文件名,比如discord-bot-1.0.0.jar,避免Heroku选错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:12:37