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

时间:2020-02-15 02:30:24

标签: node.js heroku discord discord.js

我正在尝试制作一个使用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!')
    }
})

1 个答案:

答案 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。希望这会有所帮助。