【问题标题】:Node Twitter bot keeps crashing on HerokuNode Twitter bot 在 Heroku 上不断崩溃
【发布时间】:2018-07-09 23:26:48
【问题描述】:

作为一种尝试自学 Node 以及如何使用 Heroku 的方法,我决定创建一个简单的 Twitter 机器人,它应该每天发一次推文。

当手动运行我的机器人时,一切都很好,它会发出应有的推文。一旦在 Heroku 上,甚至在我添加调度程序(每天运行一次我的机器人)之前,它就开始随机发送推文。我必须继续删除它们。我在日志中注意到,机器人不断崩溃并重新启动,这会触发推文。

我已经用 Google 搜索了几个小时,但无法弄清楚为什么会发生这种情况。我是 Node 的新手,一般来说与服务器有关,所以我真的不知道如何从这一点上进行故障排除。

如果能帮助我找出导致我的机器人崩溃的原因,我将不胜感激。

(我应该注意,我确实在 Heroku 上将其设置为 worker,并且在我的 Procfile 中。不确定这是否会有所不同。)

Heroku 日志

    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();

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

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

    我听从了这个建议,它一直在完美运行。

    这两种崩溃的原因是你没有在你的 worker dynos 上运行一个进程,你只是发出命令来发推文并退出,heroku web 和 worker dynos 旨在处理长时间运行的任务,所以你的worker 正在启动,发出一条推文,然后突然退出并崩溃,导致我们检测到崩溃并启动一个新的 worker,它只是循环执行相同的操作。

    如果您只想运行预定的推文,您可以删除您的 Procfile 并缩减您的网络和工作人员 dyno,只要您安排了它,调度程序就会启动一个单独的一次性 dyno,这将运行您的推文脚本你然后退出。

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 2020-09-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2015-12-25
      • 2017-10-23
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多