为啥我的 Heroku Discord 机器人无法连接到端口后崩溃? [复制]

Posted

技术标签:

【中文标题】为啥我的 Heroku Discord 机器人无法连接到端口后崩溃? [复制]【英文标题】:Why does my Heroku Discord bot crash after it can't connect to a port? [duplicate]为什么我的 Heroku Discord 机器人无法连接到端口后崩溃? [复制] 【发布时间】:2020-05-30 19:07:11 【问题描述】:

我正在尝试使用 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!')
    
)

【问题讨论】:

这能回答你的问题吗? Heroku Node.js Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 是的,这篇文章确实有帮助。谢谢:) 【参考方案1】:

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

到目前为止,您的 Procfile 很可能如下所示:

web: node index.js

这告诉 Heroku 在 web dyno 中运行你的程序。但是,如果您没有使用 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 中定义的 worker dyno。希望这会有所帮助。

【讨论】:

以上是关于为啥我的 Heroku Discord 机器人无法连接到端口后崩溃? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 discord.py 机器人在 Heroku 上托管时没有声音?

为啥我的 Discord Bot 在 heroku 中不断崩溃?

Heroku Discord Bot 构建但在部署时无法工作

discord.js 机器人在本地工作,但不在 Heroku 上

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

我的 Heroku Discord 机器人离线 - discord.js