22

我正在尝试在 Heroku 上使用 Flask 开发我的第一个“大型”应用程序,我正在尝试将这里的基本教程:https ://devcenter.heroku.com/articles/python与此处的说明相结合:http:// flask.pocoo.org/docs/patterns/packages/#larger-applications。它在本地与“工头启动”一起工作,但是当我推送到 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] 上运行:* 重新启动reloader 2012-12-04T23:45:23+00:00 heroku[web.1]: Error R11 (Bad bind) -> 绑定到端口 5000 的进程,应该是 33507(参见环境变量 PORT)

我对这一切都很陌生,但看起来它正试图在 Heroku 上“本地”运行。我尝试了各种组合,但无法让它发挥作用。我现在非常简单的代码是(该应用程序称为“pml”):

目录:/pml

档案:

web: python run.py

运行.py:

from pml import app
app.run(debug=True)

目录:/pml/pml/

__init__.py

from flask import Flask
app = Flask(__name__)

import pml.views

视图.py

from pml import app

@app.route('/')
def index():
    return 'Hello World!'
4

1 回答 1

35

我没有使用 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))
于 2012-12-05T00:25:11.303 回答