我正在尝试制作一个使用Heroku运行24/7的Discord机器人。一切正常,除了该机器人在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!')
}
})
答案 0 :(得分:1)
您很可能已将您的漫游器分配为在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
,您的免费dyno小时(如果您使用的是免费dyno)将继续减少24/7,并且您每月将消耗700个小时左右。如果您注册了信用卡,则限制为每月1000小时,您不必担心。否则,您必须将dyno升级为Hobby dyno,以使机器人在整个月中都可以运行。
编辑:尽管这不是公认的答案,但我仍然必须澄清一下,有时候Heroku不会读取Procfile设置。在这种情况下,您应该在项目所在的文件夹中运行以下命令:
heroku ps:scale web=0
heroku ps:scale worker=1
这将强制Heroku使用您的Procfile中定义的worker dyno。希望这会有所帮助。