Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Flask应用程序部署到Heroku_Python_Heroku_Flask - Fatal编程技术网

Python 将Flask应用程序部署到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]:* 使用重新加载程序重

我正试图在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]:* 使用重新加载程序重新启动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设置。