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

部署在Heroku的Java JDA Discord机器人运行90秒后离线如何解决

你遇到的R10错误本质是Heroku对web类型进程的强制校验要求——所有web进程必须在启动后90秒内绑定平台分配的$PORT端口用于对外提供HTTP服务,但Discord机器人属于后台服务,本身不需要监听任何HTTP端口,自然无法满足该校验要求,因此会被平台强制终止。

方案1:切换为Worker进程(最简方案)

这是最适配Discord机器人场景的解决方案,Heroku的worker类型进程无端口绑定要求,专门用于运行后台常驻服务。

  • 修改Procfile内容,将进程类型从web改为worker,同时删除无关的端口配置参数:
worker: java $JAVA_OPTS -jar build/libs/HerokuTestBot-1.0-all.jar $JAR_OPTS
  • 进入Heroku应用的Resources配置页,关闭原来的web dyno,启用新的worker dyno后重新部署即可。
  • system.properties中的server.port配置属于web服务相关配置,可直接删除,不影响机器人运行。

方案2:保留Web进程添加端口监听(仅当你需要同时提供HTTP服务时选用)

如果你确实需要保留web进程类型(比如需要对外提供健康检查、API接口等),可以在机器人启动代码中添加一个简单的HTTP服务器,监听Heroku分配的$PORT端口即可通过校验:

// 示例代码,在机器人启动逻辑中添加
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

// 启动时读取环境变量PORT
int port = Integer.parseInt(System.getenv().getOrDefault("PORT", "8080"));
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
server.createContext("/", exchange -> {
    String response = "Bot is running";
    exchange.sendResponseHeaders(200, response.getBytes().length);
    exchange.getResponseBody().write(response.getBytes());
    exchange.close();
});
server.start();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:02