为什么我的 Heroku Discord 机器人在无法连接到端口后崩溃?



我正在尝试制作一个使用 Heroku 运行 24/7 的不和谐机器人。一切都很好,除了机器人在 60 秒后崩溃的事实。

错误输出告诉我:

错误 R10(启动超时(> Web 进程在启动后 60 秒内无法绑定到$PORT

我在互联网上寻找解决方案,我找到了不少。但是,它们都没有奏效。

这是我的主文件代码:

const Discord = require('discord.js')
const {prefix, token} = require('./config.json')
const client = new Discord.Client()
// Login
client.login(token)
client.once('ready', () => {
console.log('Back online')
client.user.setActivity(' channel', {type: 'LISTENING'})
})
client.on('message', message => {
if (message.author.bot) {
return;
}
if (message.content.toLowerCase() === 'hello') {
message.channel.send('Hey!')
}
})

你很可能已分配机器人在 Procfile 中的 Web 服务上运行。Heroku Procfile是一个文件,用于存储有关Heroku应该运行哪些进程的信息。如果您将 Procfile 设置为运行web服务,Heroku 希望您在启动后绑定到所需的端口(使用process.env.PORT(。如果没有,那么 Heroku 将假设您的程序无法启动并重新启动它。

截至目前,您的Procfile很可能如下所示:

web: node index.js

这告诉Heroku在网络测功机中运行你的程序。但是,如果您没有绑定到像 Express 这样的 Node.js 服务的 HTTP 端口,Heroku 将使你的程序崩溃。要解决此问题,请将web更改为worker

worker: node index.js

请注意,通过将Procfile更改为使用worker,您的免费测功机小时数(如果您在免费测功机上运行(将继续减少24/7,并且您每月将用完大约700小时。如果您注册了信用卡,则限制设置为每月 1000 小时,您不必担心。否则,您必须将测功机升级到爱好测功机,以保持机器人运行整个月。

编辑:虽然这不是公认的答案,但我仍然必须澄清有时Heroku不会读取Procfile设置。在这种情况下,应在项目所在的文件夹中运行以下命令:

heroku ps:scale web=0
heroku ps:scale worker=1

这将迫使 Heroku 使用在 Procfile 中定义的工人测功机。希望这有帮助。

最新更新