部署简单 Python 脚本以在 Heroku 上保留 运行 时出现问题
Problems deploying simple Python script to keep running on Heroku
我有一个简单的 Python 程序,它以 30 秒的间隔重复以下过程:使用 Gmail API 检查我的收件箱,查找某种邮件,如果是找到了,用 Twilio API 给我打电话。
我一直在我的机器上 运行 这个程序,但我希望它是 运行 24x7。一位朋友说我应该可以使用 Heroku 来做到这一点。我无法弄清楚如何做到这一点,并希望得到任何帮助。
我设置了 Heroku,并首先尝试部署我的脚本(我在下面复制了它)并在 post.
末尾重现了错误
我也在 Flask 应用程序函数中尝试 运行 它,但是当我打开 Heroku link 时代码只有 运行 一次,我无法获取它在后台继续 运行。
请告诉我是否应该 differently/using 不同的 hosting/platform 提供商。
#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
请注意,Heroku 平台专为托管 Web 应用程序而不是任意守护进程而设计。当您查看 heroku logs
的输出时,我想您会看到类似 "R10 Web process failed to bind" 的错误。那是因为 Heroku 希望您的 Web 进程通过绑定到通过 $PORT
传入的端口来侦听 Web 请求;如果那没有发生,Heroku 会假设出现问题并宣布应用程序崩溃。
您可能可以让它工作 - 例如,创建一个仅回显状态以满足 "bind" 要求的 Web 进程,然后使用 "Scheduler" 附加组件到 运行 您的脚本每隔几分钟或将您的脚本定义为 "worker" 进程。或者,您可以查看其他解决方案,例如 AWS Lambda。
我有一个简单的 Python 程序,它以 30 秒的间隔重复以下过程:使用 Gmail API 检查我的收件箱,查找某种邮件,如果是找到了,用 Twilio API 给我打电话。
我一直在我的机器上 运行 这个程序,但我希望它是 运行 24x7。一位朋友说我应该可以使用 Heroku 来做到这一点。我无法弄清楚如何做到这一点,并希望得到任何帮助。 我设置了 Heroku,并首先尝试部署我的脚本(我在下面复制了它)并在 post.
末尾重现了错误我也在 Flask 应用程序函数中尝试 运行 它,但是当我打开 Heroku link 时代码只有 运行 一次,我无法获取它在后台继续 运行。
请告诉我是否应该 differently/using 不同的 hosting/platform 提供商。
#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
请注意,Heroku 平台专为托管 Web 应用程序而不是任意守护进程而设计。当您查看 heroku logs
的输出时,我想您会看到类似 "R10 Web process failed to bind" 的错误。那是因为 Heroku 希望您的 Web 进程通过绑定到通过 $PORT
传入的端口来侦听 Web 请求;如果那没有发生,Heroku 会假设出现问题并宣布应用程序崩溃。
您可能可以让它工作 - 例如,创建一个仅回显状态以满足 "bind" 要求的 Web 进程,然后使用 "Scheduler" 附加组件到 运行 您的脚本每隔几分钟或将您的脚本定义为 "worker" 进程。或者,您可以查看其他解决方案,例如 AWS Lambda。