Heroku Flask从教程部署一个“模块化”应用程序不工作,foreman开始在本地工作

2024-04-25 13:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

基于这个结构:http://flask.pocoo.org/docs/patterns/packages/

我也试过这个帖子:Deploying Flask app to Heroku

我很难让这个在heroku上生效。我通常得到的端口设置不在60秒内出错。我读过其他的SO文章,只是不知道我的项目结构是错误的还是我的procfile。我也试过5000以外的其他港口。在

以下是我当前的项目结构:

/myapplication
    Procfile
    runserver.py
    /applicationfolder
        __init__.py
        views.py

这是我的程序文件

^{pr2}$

这是我的运行服务器.py在

from applicationfolder import app
app.run()

if __name__ == '__main__':
    import os
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

这是我的初始化.py

import os

from flask import Flask
from flask import render_template, jsonify, request

app = Flask(__name__)

app.config.from_object('config')

import applicationfolder.views

从那里视图.py跑。在

这可以在本地使用foreman start和python运行服务器.py,但不适用于heroku。我尝试过很多端口,但端口似乎没有设置,即使端口不同于5000。我想这和我的项目结构有关。在


Tags: 项目端口frompyimport服务器appflask
1条回答
网友
1楼 · 发布于 2024-04-25 13:23:38

在应用程序运行()在里面两次,你也注意到了,这是把事情搞砸的原因。这个应用程序运行()调用一个简单的纯python开发服务器,以便您可以轻松地运行和/或调试脚本。在

通过在模块级别调用它(在运行服务器.py),您实际上是在加载python代码时尝试启动开发服务器,然后当它从Procfile调用时运行它时,开发服务器已经在运行中,从它的默认值开始(Flask的最新版本正在从SERVER_NAME环境变量中提取相关的默认值)。通过在这两个地方都使用它,您试图调用该方法两次。在

您基本上需要直接加载模块(在这种情况下,删除“ifname…”下的代码),或者在main下调用时使用该代码,在这种情况下,不要在模块加载时启动服务。在

相关问题 更多 >