Heroku托管Discord FiveM机器人超时 报Error waiting for network错误排查
Heroku托管FiveM配套Discord机器人网络超时排障方案
(对应报错:Error waiting for network: Resource temporarily unavailable)
核心异常点定位
结合你提供的日志、配置文件,可以直接定位3个触发问题的核心根源,和你之前尝试的调整方向无关:
- 进程刚启动到运行状态的瞬间就被强制下线,甚至没走到Discord网关连接的逻辑就抛出了系统级网络资源错误
- 日志里的「Idling because quota is exhausted」不是你账号的月度时长配额耗尽,是单进程下的临时网络连接数被占满触发的系统限制
- 你之前修改端口、新增host常量的操作完全没有实际作用,因为代码里根本没有写对应的HTTP服务监听逻辑,端口变量从头到尾没有被实际使用
具体配置修正步骤
- 第一步:清理冗余依赖,解决网络连接数被占满的问题
打开package.json,删掉所有无实际运行作用的冗余依赖:- 必须删除的无效包:
pm2(Heroku自带进程托管能力,本地跑pm2会抢占系统资源)、node-gyp(构建环境自带该工具,手动安装会发起不必要的网络请求)、python(对应包名为空的无意义npm包,构建环境已经自带Python运行时)、rebuild(无实际功能的废包)、opus@0.0.0(空包,和已安装的opusscript功能重复)、baseplayer(和discord-player功能重复的冗余包) - 只保留核心运行依赖:discord.js、discord-player、discord-xp、dotenv、mongoose、chalk、gamedig、discord-fivem-api、ffmpeg-static、opusscript、moment、moment-timezone、log-timestamp、axios
- 必须删除的无效包:
- 第二步:修正Procfile配置
把当前的Procfile内容替换为以下内容,不需要配置Web进程(Discord机器人是主动连接Discord网关,不需要对外暴露公网端口):worker: node index.js - 第三步:修正index.js的初始化逻辑
- 删掉冗余的
port、host常量代码,这俩变量没有被任何监听逻辑使用,留着只会增加代码冗余 - 给discord-player初始化加上显式的引擎配置,避免自动探测依赖时发起无效网络请求:
client.player = new Player(client); // 强制使用本地opusscript做音频解码,避免在线探测opus组件 Discord.Client.prototype._validateOptions = function() { const opts = this.options; opts.opusOnly = true; opts.ws = { large_threshold: 250 }; return opts; }; - 给MongoDB连接逻辑加上错误捕获,避免连接失败时进程静默无响应:
mongoose.init().catch(err => { console.error('数据库连接异常:', err); process.exit(1); }); client.login(process.env.TOKEN).catch(err => { console.error('Discord登录失败:', err); process.exit(1); });
- 删掉冗余的
- 第四步:重启dyno验证
清理完所有冗余配置后重新部署,之前日志里的“配额耗尽”idling提示会因为连接数不再被冗余请求占满而自动消失,不会再触发Resource temporarily unavailable的网络错误。
内容的提问来源于stack exchange,提问作者Bombo43453
相关产品推荐
相关产品推荐

