部署简单的Python脚本以继续在Heroku上运行的问题

时间:2016-07-13 04:11:59

标签: python heroku deployment procfile

我有一个简单的Python程序,每隔30秒重复一次以下过程:使用Gmail API检查我的收件箱,查找某种邮件,如果找到,请使用Twilio API给我打电话。

我已在我的机器上运行此程序,但我希望它能全天候运行。一位朋友说我应该能够使用Heroku做到这一点。我无法弄清楚如何做到这一点,并希望得到任何帮助。 我设置了Heroku,并首先尝试部署我的脚本(我已在下面复制),并在帖子结束时再现了错误。

我也尝试在Flask应用程序功能中运行它,但是当我打开Heroku链接时代码只运行一次,而我无法让它继续在后台运行。

如果我应该以不同的方式/使用其他托管/平台提供商,请告诉我。

#Procfile
web: python gmail_twilio.py 

#Logs error
2016-07-13T03:35:39.635528+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=pacific-woodland-28065.herokuapp.com request_id=54912af8-83a6-4feb-bb36-def791621e5f fwd="171.50.142.162" dyno= connect= service= status=503 bytes=

#gmail_twilio.py

while True:
  inbox_list = ListMessagesMatchingQuery(service, '##', query="in:inbox -label:called ")# create list with non called labels
  if len(inbox_list)>0:
    twiliocall() # function to call me
    for element in inbox_list:
      ModifyMessage(service, 'me', element[u'id'], {'removeLabelIds': [], 'addLabelIds': ['Label_3']}) # add called label
  time.sleep(30) # wait for 30 seconds

1 个答案:

答案 0 :(得分:0)

请注意,Heroku平台专门用于托管Web应用程序,而不是任意守护进程。当你查看heroku logs的输出时,我想你会看到像“R10 Web进程无法绑定”这样的错误。那是因为Heroku希望您的Web进程通过绑定到通过$PORT传入的端口来侦听Web请求;如果没有发生,Heroku会假设出现问题,并声明应用程序崩溃了。

您可能可以使其工作 - 例如,创建一个只响应状态以满足“绑定”要求的Web进程,然后使用“Scheduler”插件每隔几分钟运行一次脚本或定义脚本作为“工人”的过程。或者,您可以查看其他解决方案,例如AWS Lambda。