我正在尝试使用Heroku上的Flask开发我的第一个“大型”应用程序,我正在尝试将基本教程https://devcenter.heroku.com/articles/python与此处的说明结合起来:http://flask.pocoo.org/docs/patterns/packages/#larger-applications。它在本地使用“foreman start”,但当我推送到Heroku时,我收到一个错误,错误的端口正在使用中:
使用命令
python run.py
启动流程 2012-12-04T23:45:18 + 00:00 app [web.1]:*继续运行http://127.0.0.1:5000/
2012-12-04T23:45:18 + 00:00 app [web.1]:* 使用重新加载器重新启动2012-12-04T23:45:23 + 00:00 heroku [web.1]: 错误R11(错误绑定) - >绑定到端口5000的进程应为33507 (参见环境变量PORT)
我对这一切都不熟悉,但看起来它正试图在Heroku上“本地”运行。我尝试了各种各样的组合,但无法让它发挥作用。我现在非常简单的代码是(app被称为“pml”):
目录:/ pml
Procfile:
web: python run.py
run.py:
from pml import app
app.run(debug=True)
目录:/ pml / pml /
__初始化__。PY
from flask import Flask
app = Flask(__name__)
import pml.views
view.py
from pml import app
@app.route('/')
def index():
return 'Hello World!'
答案 0 :(得分:30)
我没有使用Heroku,但对我来说,看起来他们有一个Flask的保留端口,特别是33507.看起来它会尝试使用环境变量,我不知道如何在Heroku中设置。好消息是你可以告诉Flask使用哪个端口。
试试这个:
app.run(debug=True, port=33507)
并且看起来像将这个PORT添加到heroku中的env就像这样:
heroku config:add PORT=33507
你应该只需要执行其中一项操作。我会尝试第一个,因为对我而言,这是解决问题的直接方法。
修改强>
在阅读了帖子中的文章之后,我会看到问题出在哪里。
port = int(os.environ.get('PORT', 5000))
该行说明,如果设置了,则从环境中获取PORT
的值,否则使用5000.我不知道为什么他们不允许它从5000运行,如果这是他们的文档中的内容,但我会尝试这种改变:
port = int(os.environ.get('PORT', 33507))