通过 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