通过 Heroku 托管 Discord Bot,在尝试以前的建议后重复 EADDRINUSE 错误

Posted

技术标签:

【中文标题】通过 Heroku 托管 Discord Bot,在尝试以前的建议后重复 EADDRINUSE 错误【英文标题】:Hosting Discord Bot through Heroku, EADDRINUSE error repeating after trying previous suggestions 【发布时间】:2020-11-18 10:22:37 【问题描述】:

我第一次尝试通过 Heroku 托管 Discord 机器人(也是我第一次使用该网站)。它在本地运行得很好,但是一旦我上线,我就开始收到关于 $PORT 的错误。当我查看它时,我发现我需要监听服务器才能使端口保持不变,但是我所做的每一次尝试都会导致 EADDRINUSE 错误。我已经通过这些先前的答案here 和here 查看并尝试了许多示例,删除了模块并无数次重新安装它们,在启动之前结束了 node.exe 进程,但我一直遇到错误。我一定错过了什么,但我想不通,我觉得我只是在绕圈子跑。任何帮助将不胜感激。

错误报告:

2020-07-28T21:24:01.605923+00:00 heroku[web.1]: Starting process with command `npm start`
2020-07-28T21:24:03.399990+00:00 app[web.1]: 
2020-07-28T21:24:03.400006+00:00 app[web.1]: > bot@1.0.0 start /app
2020-07-28T21:24:03.400006+00:00 app[web.1]: > node bot.js
2020-07-28T21:24:03.400006+00:00 app[web.1]: 
2020-07-28T21:24:04.323323+00:00 app[web.1]: Ready!
2020-07-28T21:24:06.981374+00:00 app[web.1]: Listening on 50667
2020-07-28T21:24:07.141720+00:00 app[web.1]: events.js:292
2020-07-28T21:24:07.141721+00:00 app[web.1]:       throw er; // Unhandled 'error' event
2020-07-28T21:24:07.141722+00:00 app[web.1]:       ^
2020-07-28T21:24:07.141722+00:00 app[web.1]: 
2020-07-28T21:24:07.141724+00:00 app[web.1]: Error: listen EADDRINUSE: address already in use :::50667
2020-07-28T21:24:07.141725+00:00 app[web.1]:     at Server.setupListenHandle [as _listen2] (net.js:1313:16)
2020-07-28T21:24:07.141725+00:00 app[web.1]:     at listenInCluster (net.js:1361:12)
2020-07-28T21:24:07.141726+00:00 app[web.1]:     at Server.listen (net.js:1447:7)
2020-07-28T21:24:07.141727+00:00 app[web.1]:     at Function.listen (/app/node_modules/express/lib/application.js:618:24)
2020-07-28T21:24:07.141727+00:00 app[web.1]:     at Client.<anonymous> (/app/bot.js:21075:4)
2020-07-28T21:24:07.141727+00:00 app[web.1]:     at Client.emit (events.js:315:20)
2020-07-28T21:24:07.141743+00:00 app[web.1]:     at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
2020-07-28T21:24:07.141745+00:00 app[web.1]:     at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
2020-07-28T21:24:07.141752+00:00 app[web.1]:     at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
2020-07-28T21:24:07.141752+00:00 app[web.1]:     at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
2020-07-28T21:24:07.141753+00:00 app[web.1]: Emitted 'error' event on Server instance at:
2020-07-28T21:24:07.141753+00:00 app[web.1]:     at emitErrorNT (net.js:1340:8)
2020-07-28T21:24:07.141753+00:00 app[web.1]:     at processTicksAndRejections (internal/process/task_queues.js:84:21) 
2020-07-28T21:24:07.141754+00:00 app[web.1]:   code: 'EADDRINUSE',
2020-07-28T21:24:07.141754+00:00 app[web.1]:   errno: 'EADDRINUSE',
2020-07-28T21:24:07.141755+00:00 app[web.1]:   syscall: 'listen',
2020-07-28T21:24:07.141755+00:00 app[web.1]:   address: '::',
2020-07-28T21:24:07.141756+00:00 app[web.1]:   port: 50667
2020-07-28T21:24:07.141756+00:00 app[web.1]: 
2020-07-28T21:24:07.154255+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-07-28T21:24:07.154464+00:00 app[web.1]: npm ERR! errno 1
2020-07-28T21:24:07.157313+00:00 app[web.1]: npm ERR! bot@1.0.0 start: `node bot.js`
2020-07-28T21:24:07.157445+00:00 app[web.1]: npm ERR! Exit status 1
2020-07-28T21:24:07.157646+00:00 app[web.1]: npm ERR! 
2020-07-28T21:24:07.157759+00:00 app[web.1]: npm ERR! Failed at the bot@1.0.0 start script.
2020-07-28T21:24:07.157832+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2020-07-28T21:24:07.169750+00:00 app[web.1]: 
2020-07-28T21:24:07.169882+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2020-07-28T21:24:07.169957+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-07-28T21_24_07_159Z-debug.log
2020-07-28T21:24:07.254000+00:00 heroku[web.1]: State changed from starting to crashed
2020-07-28T21:24:07.225012+00:00 heroku[web.1]: Process exited with status 1

package.json


  "name": "bot",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": 
    "discord.js": "^12.2.0",
    "exit-hook": "^2.2.0",
    "express": "^4.17.1",
    "http": "0.0.1-security",
    "webpack-dev-server": "^3.11.0"
  ,
  "scripts": 
    "start": "node bot.js",
    "stop-win": "Taskkill /IM node.exe /F"
  ,
  "main": "bot.js",
  "devDependencies": ,
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": ""

当前代码(尽管我也尝试了许多不同的代码。)

const express = require('express');
const path = require('path');
const PORT = process.env.PORT || 5000;

express()
  .use(express.static(path.join(__dirname, 'public')))
  .set('views', path.join(__dirname, 'views'))
  .set('view engine', 'ejs')
  .get('/', (req, res) => res.render('pages/index'))
  .listen(PORT, () => console.log(`Listening on $ PORT `));


,);

我知道我可能应该通过 Heroku 将机器人作为 Worker 而不是 Web 运行,但是由于某种原因我无法使用该选项,并且我的 Procfile 什么也没做。 我知道一定有我忽略的东西。当我运行 stop-win 脚本时,即使我只尝试运行一次代码,它也会杀死两个 node.exe 进程。 我已经看这个太久了(好几天了!)并且继续转圈,我需要一些新的眼睛和想法。请帮忙!

编辑: 感谢 Tin Nguyen 为我指明了 Procfile 的正确方向!我能够使用this thread 进行回声,从而使功能正常的 Procfile 成为工作人员。这让我解决了所有的烂摊子。非常感谢!

【问题讨论】:

您正在多次收听$PORT。您正在开发一个不需要网站的不和谐机器人(除非您为不和谐机器人编写了 html、js 和 css 代码......)。您应该使用工人测功机而不是网络测功机。如果您的Procfile 没有工作,那么您的Procfile 就有问题。确保您的Procfile 没有以Procfile.txt 结尾的文件无效。 【参考方案1】:

我认为错误来自端口!查看错误,

Ready!
Listening on 50667
events.js:292
throw er; // Unhandled 'error' event
Error: listen EADDRINUSE: address already in use :::50667

它说“地址已在使用中”,尝试更改它并让我注意到它是否有效!

【讨论】:

以上是关于通过 Heroku 托管 Discord Bot,在尝试以前的建议后重复 EADDRINUSE 错误的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js bot 没有上线由 Heroku 托管

Discord Py - Heroku 托管 Bot 上的音乐命令

Heroku discord bot 托管错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

Discord bot 不是从 heroku 开始的

Heroku Discord Bot“没有运行 Web 进程”

为啥我的 Heroku discord bot 没有上线?