为什么我在heroku上托管的不和谐bot会随机关闭?

时间:2019-04-19 12:45:48

标签: javascript heroku discord

我有一个用JS编写并托管在Heroku上的Discord机器人。从2天开始,它每5-30分钟随机关闭一次。当它关闭时,我重新启动(关闭并再次打开)dyno(它是一个工人dyno,应该是24/7),然后又打开了,但是在上述时间之后又关闭了,只有机器人,dyno仍在。我没有修改任何代码,它是随机发生的,我还有其他在Heroku上托管了漫游器的朋友,他们没有问题。我正在将Heroku免费计划与工人恐龙一起使用。另外,当Heroku联机时,这些命令不起作用,仅当我由node index.js运行bot时,这些命令才起作用。

我尝试更改Heroku的选项,查看日志,修改一些代码,甚至将我在Internet上找到的代码每5分钟ping一次bot进行一次

这是我的日志:

2019-04-19T12:14:34.586658+00:00 app[worker.1]:     at GuildMemberAddHandler.handle (/app/node_modules/discord.js/src/client/websocket/packets/handlers/GuildMemberAdd.js:12:13)
2019-04-19T12:14:34.586660+00:00 app[worker.1]:     at WebSocketPacketManager.handle (/app/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65)
2019-04-19T12:14:34.586661+00:00 app[worker.1]:     at WebSocketConnection.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
2019-04-19T12:14:34.586663+00:00 app[worker.1]:     at WebSocketConnection.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
2019-04-19T12:14:34.586665+00:00 app[worker.1]:     at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:120:16)
2019-04-19T12:14:34.671352+00:00 heroku[worker.1]: State changed from up to crashed
2019-04-19T12:14:34.652558+00:00 heroku[worker.1]: Process exited with status 1
2019-04-19T12:41:06.879262+00:00 heroku[worker.1]: State changed from crashed to down
2019-04-19T12:41:11.663020+00:00 heroku[worker.1]: Starting process with command `node index.js`
2019-04-19T12:41:12.348731+00:00 heroku[worker.1]: State changed from starting to up
2019-04-19T12:41:14.194602+00:00 app[worker.1]: Attempting to load command goodmorning
2019-04-19T12:41:14.198617+00:00 app[worker.1]: Attempting to load command goodnight
2019-04-19T12:41:14.199576+00:00 app[worker.1]: Attempting to load command hug
2019-04-19T12:41:14.200215+00:00 app[worker.1]: Attempting to load command kamehameha
2019-04-19T12:41:14.200930+00:00 app[worker.1]: Attempting to load command kickballs
2019-04-19T12:41:14.201643+00:00 app[worker.1]: Attempting to load command kiss
2019-04-19T12:41:14.206727+00:00 app[worker.1]: Attempting to load command scare
2019-04-19T12:41:14.207865+00:00 app[worker.1]: Attempting to load command help
2019-04-19T12:41:14.208523+00:00 app[worker.1]: Attempting to load command info
2019-04-19T12:41:14.208951+00:00 app[worker.1]: Attempting to load command invite
2019-04-19T12:41:14.209455+00:00 app[worker.1]: Attempting to load command nikonikoni
2019-04-19T12:41:14.209917+00:00 app[worker.1]: Attempting to load command ping
2019-04-19T12:41:14.210335+00:00 app[worker.1]: Attempting to load command running
2019-04-19T12:41:14.211635+00:00 app[worker.1]: Attempting to load command servers
2019-04-19T12:41:14.212116+00:00 app[worker.1]: Attempting to load command test
2019-04-19T12:41:14.212553+00:00 app[worker.1]: Attempting to load command version
2019-04-19T12:41:17.072384+00:00 app[worker.1]: Ready to serve in 600 channels on 22 servers, for a total of 16185 users.

当它崩溃时,显示为:

2019-04-19T12:45:25.500389+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=dangerdiscord.herokuapp.com request_id=bb4b7f4f-d3c4-441a-add4-18b85a78e8cb fwd="3.90.103.169" dyno= connect= service= status=503 bytes= protocol=http
2019-04-19T12:45:27.764983+00:00 app[worker.1]: /app/events/guildMemberAdd.js:2
2019-04-19T12:45:27.764996+00:00 app[worker.1]:   const defaultChannel = member.guild.channels.find(channel => channel.permissionsFor(guild.me).has("SEND_MESSAGES"));
2019-04-19T12:45:27.764998+00:00 app[worker.1]:                                                                                       ^
2019-04-19T12:45:27.764999+00:00 app[worker.1]: 
2019-04-19T12:45:27.765001+00:00 app[worker.1]: ReferenceError: guild is not defined
2019-04-19T12:45:27.765003+00:00 app[worker.1]:     at member.guild.channels.find.channel (/app/events/guildMemberAdd.js:2:87)
2019-04-19T12:45:27.765004+00:00 app[worker.1]:     at Map.find (/app/node_modules/discord.js/src/util/Collection.js:506:11)
2019-04-19T12:45:27.765006+00:00 app[worker.1]:     at module.exports (/app/events/guildMemberAdd.js:2:48)
2019-04-19T12:45:27.765007+00:00 app[worker.1]:     at Client.emit (events.js:189:13)
2019-04-19T12:45:27.765009+00:00 app[worker.1]:     at Guild._addMember (/app/node_modules/discord.js/src/structures/Guild.js:1192:19)
2019-04-19T12:45:27.765011+00:00 app[worker.1]:     at GuildMemberAddHandler.handle (/app/node_modules/discord.js/src/client/websocket/packets/handlers/GuildMemberAdd.js:12:13)
2019-04-19T12:45:27.765012+00:00 app[worker.1]:     at WebSocketPacketManager.handle (/app/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65)
2019-04-19T12:45:27.765013+00:00 app[worker.1]:     at WebSocketConnection.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
2019-04-19T12:45:27.765014+00:00 app[worker.1]:     at WebSocketConnection.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
2019-04-19T12:45:27.765015+00:00 app[worker.1]:     at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:120:16)
2019-04-19T12:45:27.903986+00:00 heroku[worker.1]: State changed from up to crashed
2019-04-19T12:45:27.889791+00:00 heroku[worker.1]: Process exited with status 1

3 个答案:

答案 0 :(得分:0)

如果您使用的是免费版本,我很确定heroku会超时。它在使用中还是仅在使用时才停止?

答案 1 :(得分:0)

以下是有关Heroku的一些要了解的东西:

  1. 如果您使用网络测功机,则机器人在闲置30分钟后将关闭,要使该机器人运行为“ 24/7”,则应使用辅助测功机。

  2. Heroku是一项免费服务(除非您付费),因此显然他们无法100%地保持您的bot在线,他们每月为您提供550小时的免费托管时间(大约有730小时)如果您在帐户中添加了信用卡,则每月可以再获得450个小时的托管服务,这显然比一个月的托管时间还要多,而且他们永远不会向您的信用卡收取任何费用,他们这样做是为了确保您是一个真正的人。

  3. Heroku上多个项目的工作时间不是基于项目的,而是基于帐户的,因此,如果您拥有每月1000小时的免费帐户,但是托管了多个项目,则这些时间不会持续一个月

编辑:PS:您的问题在其他地方,但是由于您使用的是Heroku,因此我认为有必要让您理解,如果您愿意花钱,我建议您考虑使用更强大的VPS用于机器人托管。我特别建议您这样做,因为您似乎有大约16,000位用户在使用该bot,这可能会导致Heroku溢出/使您的bot缓慢且不可靠。

答案 2 :(得分:0)

我有类似的情况,我正在使用的解决方法是每30分钟ping一次bot(在我的情况下为HTTP GET请求),销毁客户端并再次登录。

缺点是停机时间只有几秒钟,但是对于我的用例来说完全没问题。