使用Heroku部署Flask

时间:2013-06-23 11:34:42

标签: heroku flask

我正在尝试将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文件。

感谢。

4 个答案:

答案 0 :(得分:38)

在我在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可用

答案 1 :(得分:4)

您的main.py脚本无法绑定到特定端口,它需要绑定到$PORT环境变量中设置的端口号。 Heroku在调用您的应用程序之前在该变量中设置它想要的端口。

您收到的错误表明您绑定的端口不是Heroku所期望的端口。

答案 2 :(得分:2)

除了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

答案 3 :(得分:0)

这也解决了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)