gpt4 book ai didi

python - Heroku Flask - 部署教程中的 'modular' 应用程序不起作用,工头启动在本地工作

转载 作者:行者123 更新时间:2023-12-01 05:20:55 25 4
gpt4 key购买 nike

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

我也尝试过这篇文章:Deploying Flask app to Heroku

我无法让它在 Heroku 上运行。我通常会收到 PORT does not set inside 60 秒的错误。我读过其他 SO 帖子,只是无法弄清楚我的项目结构是否错误或我的 procfile。我也尝试了 5000 以外的其他端口。

这是我当前的项目结构:

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

这是我的 Procfile

web: python runserver.py $PORT

这是我的 runserver.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)

这是我的init.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

从那里运行views.py。

这可以在本地使用 foreman start 和 python runserver.py,但不适用于 heroku。我已经用 PORT 尝试了很多东西,但即使使用不同于 5000 的 PORT,端口似乎也没有设置。我认为这与我的项目结构有关。

最佳答案

app.run() 在那里出现了两次,正如您所指出的,这就是把事情搞砸的原因。 app.run() 调用一个简单的纯 python 开发服务器,以便您可以轻松运行和/或调试脚本。

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

您基本上想要直接加载模块(在这种情况下,杀死“if name ...”下的代码,或者在 ma​​in< 下调用时使用该代码/strong>,在这种情况下,不要在模块加载时启动服务。

关于python - Heroku Flask - 部署教程中的 'modular' 应用程序不起作用,工头启动在本地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22416699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com