【问题标题】:Deploying Flask app to Heroku将 Flask 应用程序部署到 Heroku
【发布时间】:2012-11-22 17:54:13
【问题描述】:

我正在尝试在 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 应用 [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 (见环境变量 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

view.py

from pml import app

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

【问题讨论】:

    标签: python heroku flask


    【解决方案1】:

    我没有使用 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 更改为:import osfrom pml import appport = int(os.environ.get('PORT', 5000))app.run(host='0.0.0.0', port=port) 让它工作
    • Heroku 为每个测功机分配 PORT 变量。这不是你的选择。 1.不提供丢失端口的后备值,它将被设置 2.不要尝试手动设置端口变量
    • @PeterLada 所以这个解决方案不再起作用了?
    • 从来没有工作过。只需使用port = int(os.getenv('PORT')),该值将始终由 Heroku 设置。
    猜你喜欢
    • 2015-05-20
    • 2020-01-23
    • 2017-12-05
    • 2018-04-07
    • 2020-04-09
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多