gpt4 book ai didi

python - Heroku 应用程序在本地运行但出现 H12 超时错误(使用包)

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:46 25 4
gpt4 key购买 nike

类似的问题已经被问到,但 H12 似乎是由很多事情引起的,没有一个答案适用于这里。我以前用 heroku 构建过 python 应用程序,但现在我使用的是 Miguel Grinberg 的 Flask Mega-Tutorial 的包结构。我不知道出了什么问题。

我的应用程序是带有 Heroku postgres 数据库的 python/Flask/SQLAlchemy。该应用程序在本地完全可用。当我推送到 Heroku 时,我得到一个 H12。

这是我的应用结构:

  rootappdirectory\
app\
static\
templates\
__init__.py
views.py
models.py
run.py
[plus flask / venv files]

run.py 看起来像这样:

import os
from flask import Flask

from app import app
app.run()

app/__init__.py 看起来像这样:

(a bunch of imports)

app = Flask(__name__)
db = SQLAlchemy(app)

login_manager = LoginManager()
(a bunch of login_manager stuff)

from app import views, models

我的 Procfile 是 web: gunicorn run:app

我在本地和远程使用 heroku 数据库。该应用程序在我的本地计算机(0.0.0.0:5000)上完美运行。但是当我推送到 heroku 并运行该应用程序时,这是日志:

2013-04-15T06:50:27.165532+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/favicon.ico host=floating-driftwood-6203.herokuapp.com fwd="24.6.48.240" dyno=web.1 connect=1ms service=30007ms status=503 bytes=0
2013-04-15T06:50:34.908756+00:00 app[web.1]: 2013-04-15 06:50:34 [2] [CRITICAL] WORKER TIMEOUT (pid:65)
2013-04-15T06:50:34.914436+00:00 app[web.1]: 2013-04-15 06:50:34 [2] [CRITICAL] WORKER TIMEOUT (pid:65)
2013-04-15T06:50:34.918114+00:00 app[web.1]: 2013-04-15 06:50:34 [66] [INFO] Booting worker with pid: 66
2013-04-15T06:50:35.083182+00:00 app[web.1]: * Running on http://127.0.0.1:5000/
2013-04-15T06:51:04.216671+00:00 app[web.1]: 2013-04-15 06:51:04 [2] [CRITICAL] WORKER TIMEOUT (pid:66)
2013-04-15T06:51:04.223440+00:00 app[web.1]: 2013-04-15 06:51:04 [2] [CRITICAL] WORKER TIMEOUT (pid:66)
2013-04-15T06:51:04.229350+00:00 app[web.1]: 2013-04-15 06:51:04 [67] [INFO] Booting worker with pid: 67

我尝试过不同的选项 - 起初我遇到了“正在使用连接”错误,我通过进入 debug=False 来修复它,但坦率地说,我宁愿在 debug=True 中!我的主app不在根目录下好像有问题?

提前致谢。

最佳答案

问题是 run.py 毫无防备地调用了 app.run - 这实际上调用了 werkzeug.serving.run_simple 来启动一个子 -处理传入请求的进程......在 gunicorn 下运行时你不想这样做(因为 gunicorn 将为你处理进程管理)。

只需在你的 app.run 调用之前添加一个 if __name__ == "__main__" 守卫,一切都应该工作:

# run.py
if __name__ == "__main__":
app.run()

关于python - Heroku 应用程序在本地运行但出现 H12 超时错误(使用包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16020749/

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