Python 将Flask应用程序部署到Heroku
我正试图在Heroku上开发我的第一个带有Flask的“大型”应用程序,并尝试将这里的基本教程与这里的说明结合起来。它与“foreman start”一起在本地工作,但当我推到Heroku时,我得到一个错误,即使用了错误的端口: 使用命令Python 将Flask应用程序部署到Heroku,python,heroku,flask,Python,Heroku,Flask,我正试图在Heroku上开发我的第一个带有Flask的“大型”应用程序,并尝试将这里的基本教程与这里的说明结合起来。它与“foreman start”一起在本地工作,但当我推到Heroku时,我得到一个错误,即使用了错误的端口: 使用命令python run.py启动进程 2012-12-04T23:45:18+00:00应用程序[web.1]:*正在运行 http://127.0.0.1:5000/2012-12-04T23:45:18+00:00应用程序[web.1]:* 使用重新加载程序重
python run.py启动进程
2012-12-04T23:45:18+00:00应用程序[web.1]:*正在运行
http://127.0.0.1:5000/
2012-12-04T23:45:18+00:00应用程序[web.1]:*
使用重新加载程序重新启动2012-12-04T23:45:23+00:00 heroku[web.1]:
错误R11(绑定错误)->绑定到端口5000的进程应为33507
(请参阅环境变量端口)
我对这一切都不熟悉,但它似乎试图在Heroku上“本地”运行。我试过各种组合,但都没用。我现在非常简单的代码是(应用程序名为“pml”):
目录:/pml
程序文件:
web: python run.py
run.py:
from pml import app
app.run(debug=True)
目录:/pml/pml/
__初始值
from flask import Flask
app = Flask(__name__)
import pml.views
view.py
from pml import app
@app.route('/')
def index():
return 'Hello World!'
我没有用过Heroku,但对我来说,他们似乎有一个为Flask预留的端口,特别是33507。看起来它将尝试使用一个环境变量,我不知道如何在Heroku中设置。好消息是您可以告诉Flask使用哪个端口
试试这个:
app.run(debug=True, port=33507)
在heroku中将端口添加到环境中的操作如下:
heroku config:add PORT=33507
你应该只需要做其中一项。我会尝试第一种方法,因为对我来说,这是解决问题的直截了当的方法
编辑
读了你的文章后,我明白了问题的症结所在
port = int(os.environ.get('PORT', 5000))
该行表示,如果设置了PORT
,则从环境中获取该值,否则使用5000。我不知道他们为什么不允许从5000开始运行,如果这是他们文档中的内容,但我会尝试以下更改:
port = int(os.environ.get('PORT', 33507))
谢谢你给我指明了正确的方向。通过将run.py从pml import app更改为:import os
port=int(os.environ.get('port',5000))
app.run(host='0.0.0',port=port)
Heroku为每个dyno分配端口变量。这不是你的选择。1.不要在缺少端口时提供回退值,它将设置为2。不要试图设置端口变量manually@PeterLada所以这个解决方案不再有效了?从来没有起过作用。只需使用port=int(os.getenv('port'))
该值将始终由Heroku设置。