使用 Heroku 部署 Flask
Posted
技术标签:
【中文标题】使用 Heroku 部署 Flask【英文标题】:Deploying Flask with Heroku 【发布时间】:2013-06-20 01:35:32 【问题描述】:我正在尝试将 Flask 应用程序部署到 Heroku,但是在推送代码时出现错误
2013-06-23T11:23:59.264600+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
我不确定要尝试什么,我尝试将端口从 5000 更改为 33507,但无济于事。我的 Procfile 看起来像这样:
web: python main.py
main.py
是启动服务器的主要 Flask 文件。
谢谢。
【问题讨论】:
你能发布你的 main.py 吗(带有任何数据库凭据和未删除的东西) 您会接受@msiemens 的帖子作为答案吗? 【参考方案1】:在 Heroku 上托管的 Flask 应用程序中,我使用以下代码启动服务器:
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
在本地开发时,这将使用端口 5000,在生产中 Heroku 将设置 PORT
环境变量。
(旁注:默认情况下,Flask 只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问(请参阅Quickstart)。设置 host='0.0.0.0'
将使 Flask 可从网络访问)
【讨论】:
【参考方案2】:这也解决了H20: App boot timeout的问题。
我的 Procfile 看起来像这样:
web: gunicorn -t 150 -c gunicorn_config.py main:app --bind 0.0.0.0:$PORT
和 main.py:
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
【讨论】:
【参考方案3】:除了msiemens的回答
import os
from run import app as application
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
application.run(host='0.0.0.0', port=port)
您的 Procfile 应该指定在这种情况下存储在 heroku 环境变量 $PORT 中的端口地址
web: gunicorn --bind 0.0.0.0:$PORT wsgi
【讨论】:
【参考方案4】:您的main.py
脚本无法绑定到特定端口,它需要绑定到$PORT
环境变量中设置的端口号。 Heroku 在调用您的应用程序之前在该变量中设置它想要的端口。
您收到的错误表明您正在绑定到一个不是 Heroku 期望的端口。
【讨论】:
以上是关于使用 Heroku 部署 Flask的主要内容,如果未能解决你的问题,请参考以下文章
由于 Error=H10,Flask App 在通过 Heroku 部署时导致应用程序错误
在 Heroku 上部署 Flask Websockets 应用程序时遇到问题
无法在 Heroku 上部署 Flask 应用程序 [致命错误:mpfr.h:没有这样的文件或目录]
Flask Python中的URL前缀使用Blueprint部署到Heroku