我正在尝试将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文件。
感谢。
答案 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)