Node Twitter bot 不断在 Heroku 上崩溃



为了自学一些Node以及如何使用Heroku,我决定创建一个简单的Twitter机器人,每天应该发一次推文。

手动运行我的机器人时,一切正常,它会按预期发推文。一旦在 Heroku 上,甚至在我添加调度程序(每天运行一次我的机器人(之前,它就开始随机时间发推文。我必须继续删除它们。我在日志中注意到,机器人不断崩溃并重新启动,从而触发推文。

我已经在谷歌上搜索了几个小时,但无法弄清楚为什么会发生这种情况。我是 Node 的新手,通常与服务器有关,所以我真的不确定如何从这一点进行故障排除。

我将不胜感激任何帮助,以找出导致我的机器人崩溃的原因。

(我应该注意,我确实将其设置为Heroku上的worker,这是我Procfile。不确定这是否有区别。

希罗库日志

2018-07-08T16:21:10.427313+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T16:21:11.167238+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T16:21:15.159855+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T16:21:15.056356+00:00 heroku[worker.1]: Process exited with status 0
2018-07-08T16:56:32.097321+00:00 heroku[worker.1]: State changed from crashed to starting
2018-07-08T16:56:36.064795+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T16:56:36.789264+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T16:56:40.212853+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T16:56:40.170153+00:00 heroku[worker.1]: Process exited with status 0
2018-07-08T17:08:08.000000+00:00 app[api]: Build started by user myemailaddress
2018-07-08T17:08:23.727988+00:00 app[api]: Deploy 852c8541 by user myemailaddress
2018-07-08T17:08:23.727988+00:00 app[api]: Release v17 created by user myemailaddress
2018-07-08T17:08:24.186005+00:00 heroku[worker.1]: State changed from crashed to starting
2018-07-08T17:08:24.000000+00:00 app[api]: Build succeeded
2018-07-08T17:08:26.514939+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T17:08:27.156637+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T17:08:28.631772+00:00 heroku[worker.1]: Process exited with status 0
2018-07-08T17:08:28.723695+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T17:08:28.725787+00:00 heroku[worker.1]: State changed from crashed to starting
2018-07-08T17:08:31.479079+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T17:08:32.358515+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T17:08:33.922886+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T17:08:33.878013+00:00 heroku[worker.1]: Process exited with status 0
2018-07-08T17:12:36.000000+00:00 app[api]: Build started by user myemailaddress
2018-07-08T17:12:48.895075+00:00 app[api]: Release v18 created by user myemailaddress
2018-07-08T17:12:48.895075+00:00 app[api]: Deploy 1fbb896c by user myemailaddress
2018-07-08T17:12:49.246800+00:00 heroku[worker.1]: State changed from crashed to starting
2018-07-08T17:12:49.000000+00:00 app[api]: Build succeeded
2018-07-08T17:12:53.635812+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T17:12:54.327615+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T17:12:57.874384+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T17:12:57.852555+00:00 heroku[worker.1]: Process exited with status 0
2018-07-08T17:35:48.475654+00:00 heroku[worker.1]: State changed from crashed to starting
2018-07-08T17:35:52.257156+00:00 heroku[worker.1]: Starting process with command `node bot.js`
2018-07-08T17:35:52.995975+00:00 heroku[worker.1]: State changed from starting to up
2018-07-08T17:35:56.888137+00:00 heroku[worker.1]: State changed from up to crashed
2018-07-08T17:35:56.871199+00:00 heroku[worker.1]: Process exited with status 0

机器人源代码:https://github.com/meowwwls/words-of-tori-amos/blob/master/bot.js

const twit = require('twit');
const getVideo = require('./youtube');
const { getLyrics } = require('./lyricadder/lyrics');
const { randomNumber } = require('./helpers');
const config = {
consumer_key: process.env.consumer_key,
consumer_secret: process.env.consumer_secret,
access_token: process.env.access_token,
access_token_secret: process.env.access_token_secret
};
const Twitter = new twit(config);
const lyrics = getLyrics();
const tweetLyric = () => {
const random = randomNumber(lyrics.length);
const lyric = lyrics[random];
getVideo(lyric.song).then(response => {
const songHash = lyric.song.replace(/s/g, '');
const tweet = {
status: `${lyric.lyric}n${response} #ToriAmos #${songHash}`
};
Twitter.post('statuses/update', tweet, (err, data, response) => {
if (err) {
console.log(err);
}
});
});
};
tweetLyric();

由 Heroku 支持解决!这让我发疯了。我想我会分享支持答案,以防其他人遇到这个问题。我认为我阅读的 Twitter 机器人教程没有这个问题的原因是它们都让他们的机器人也做其他事情,例如响应主题标签、关注者或发送给他们的机器人的推文。或者他们使用setInterval发推文,这让应用程序持续运行。

我遵循了这个建议,它一直运行得很好。

两次崩溃的原因是你没有在你的工人测功机上运行一个进程,你只是发出命令发推并退出,heroku web 和工人测功机旨在处理长时间运行的任务,所以你的工人正在启动,做一条推文然后突然退出并崩溃,导致我们检测到崩溃并启动一个新的工作器, 它只是在循环中一圈又一圈地做同样的事情。

如果你只想运行预定的推文,你可以删除你的Procfile并缩小你的网络和workerdynos,调度程序将在你安排的时候启动一个单独的一次性测功机,这将为你运行你的推文脚本并退出。

最新更新