与 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 天的免费测功机小时数(或更早,如果您的帐户未经过验证)
我是 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 天的免费测功机小时数(或更早,如果您的帐户未经过验证)