Heroku 上的 Flask App 不会停止引导工作人员

Flask App on Heroku does not stop booting workers

我一直在尝试将我的 Flask 项目(Twilio SMS 机器人)部署到 Heroku,但每当我部署日志时,都会显示工作人员正在不停地启动:

2021-01-10T18:57:11.525145+00:00 app[web.1]: [2021-01-10 18:57:11 +0000] [20632] [INFO] Booting worker with pid: 20632
2021-01-10T18:57:11.902427+00:00 app[web.1]: [2021-01-10 18:57:11 +0000] [20633] [INFO] Booting worker with pid: 20633
2021-01-10T18:57:12.018448+00:00 app[web.1]: [2021-01-10 18:57:12 +0000] [20634] [INFO] Booting worker with pid: 20634
2021-01-10T18:57:12.475161+00:00 app[web.1]: [2021-01-10 18:57:12 +0000] [20635] [INFO] Booting worker with pid: 20635
2021-01-10T18:57:12.622354+00:00 app[web.1]: [2021-01-10 18:57:12 +0000] [20636] [INFO] Booting worker with pid: 20636
2021-01-10T18:57:12.945738+00:00 app[web.1]: [2021-01-10 18:57:12 +0000] [20637] [INFO] Booting worker with pid: 20637
2021-01-10T18:57:13.301953+00:00 app[web.1]: [2021-01-10 18:57:13 +0000] [20638] [INFO] Booting worker with pid: 20638
2021-01-10T18:57:13.506961+00:00 app[web.1]: [2021-01-10 18:57:13 +0000] [20639] [INFO] Booting worker with pid: 20639
2021-01-10T18:57:13.806545+00:00 app[web.1]: [2021-01-10 18:57:13 +0000] [20640] [INFO] Booting worker with pid: 20640
2021-01-10T18:57:13.912250+00:00 app[web.1]: [2021-01-10 18:57:13 +0000] [20641] [INFO] Booting worker with pid: 20641
2021-01-10T18:57:14.842376+00:00 app[web.1]: [2021-01-10 18:57:14 +0000] [20644] [INFO] Booting worker with pid: 20644
2021-01-10T18:57:15.082539+00:00 app[web.1]: [2021-01-10 18:57:15 +0000] [20645] [INFO] Booting worker with pid: 20645
2021-01-10T18:57:15.245975+00:00 app[web.1]: [2021-01-10 18:57:15 +0000] [20646] [INFO] Booting worker with pid: 20646

当我尝试启动应用程序时,我最终在 30 秒后收到错误 12(超时)。这是我的 Procfile:

web: gunicorn main:app

我的 slug 大小很大 (261 MB),所以我不确定它是否与此有关。我还在构建日志中注意到:

ERROR: tensorflow-cpu 2.4.0 has requirement wheel~=0.35, but you'll have wheel 0.34.2 which is incompatible.

我不确定这是否会导致错误。一切都在我的本地机器上正常运行。如有任何建议,我们将不胜感激 - 提前致谢。

这里是 Twilio 开发人员布道者。

我在这里猜测,但可能是您的应用程序未在 Heroku 期望的端口号上启动(由 PORT 环境变量提供。当 Heroku 未检测到该应用程序时开始,它会反复尝试直到超时。

按照 getting a Python application running on Heroku 的 Heroku 教程,您应该使用如下方式从环境中获取端口号:

port = int(os.environ.get("PORT", 5000))

然后将其用于 运行 应用程序

app.run(host='0.0.0.0', port=port)

鉴于最后的错误,您可能应该降级应用程序使用的 wheel 版本以匹配 Heroku 上可用的版本。

我在启动 Flask 应用程序和 运行 时遇到了与 wheel 类似的问题。我使用 sudo apt-get python3-pip 更新了我的点子。