与 Heroku 一起部署的 Twitter 机器人关闭

Twitter bot deployed with Heroku shuts down

我是 Heroku 平台的新手,我不明白为什么我部署的 Twitter 机器人会在一段时间后关闭。不知道是测功机还是别的原因。

bot.py

import time
import json
import requests
import tweepy
from os import environ

consumer_key = environ['api_key'] #API key
consumer_secret = environ['api_key_secret'] #API key scret
key = environ['access_token'] #Access token
secret = environ['access_token_secret'] #Access token secret

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) # Authentication
auth.set_access_token(key, secret) # Grant access to API

api = tweepy.API(auth) # Connect to API

def get_quote():
    url = 'https://programming-quotes-api.herokuapp.com/Quotes/random' 
    response = requests.get(url)
    data = json.loads(response.text)
    data = data['en']+'\n--'+data['author']
    return data

def tweet_quote():
    interval = 60 * 20 # 20 minutes

    while True:
        quote = get_quote()
        api.update_status(quote)
        time.sleep(interval)

if __name__ == "__main__":
    tweet_quote()

过程文件

web: python server.py
worker: python bot.py

dyno info here

你的Procfile表明你有一个web进程和一个worker进程。

假设您使用的是免费测功机,this behaviour is expected(加粗):

If an app has a free web dyno, and that dyno receives no web traffic in a 30-minute period, it will sleep. In addition to the web dyno sleeping, the worker dyno (if present) will also sleep.

的应用程序上免费 worker dynos 有 web dyno do not 睡眠,但是当然,他们每个月会消耗大约 720 个免费测功机小时(每天 24 小时 × 每月 30 天)。

您有几个选择:

  • 运行 您的工作人员定期(但不是经常)通过 Heroku Scheduler
    • 例如也许 运行 在有限的时间/推文中每小时一次
  • 升级到付费测功机
  • 将您的免费 worker dyno 移动到另一个没有 web dyno 的应用程序以防止它休眠...
    • ...虽然这对您的应用程序可能意义不大
  • 至少每 30 分钟 ping 一次,让您的网络测功机保持活跃...
    • ...但随后您将 运行 每个月大约有 20 天的免费测功机小时数(或更早,如果您的帐户未经过验证)