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 Heroku应用程序在本地运行,但出现H12超时错误(使用包)_Python_Heroku_Flask_Gunicorn - Fatal编程技术网

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

Python Heroku应用程序在本地运行,但出现H12超时错误(使用包),python,heroku,flask,gunicorn,Python,Heroku,Flask,Gunicorn,有人问过类似的问题,但H12似乎是由许多因素引起的,没有一个答案适用于这里。我以前用heroku构建过python应用程序,但现在我使用的是Miguel Grinberg的包结构,我不知道出了什么问题 我的应用程序是python/Flask/SQLAlchemy,带有Heroku postgres数据库。该应用程序完全可以在本地运行。当我推到Heroku时,我得到了H12 以下是我的应用程序结构: rootappdirectory\ app\ static\

有人问过类似的问题,但H12似乎是由许多因素引起的,没有一个答案适用于这里。我以前用heroku构建过python应用程序,但现在我使用的是Miguel Grinberg的包结构,我不知道出了什么问题

我的应用程序是python/Flask/SQLAlchemy,带有Heroku postgres数据库。该应用程序完全可以在本地运行。当我推到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()
(a bunch of imports)

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

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

from app import views, models
app/\uuuu init\uuuuuuuuy.py如下所示:

import os
from flask import Flask

from app import app
app.run()
(a bunch of imports)

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

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

from app import views, models
我的程序文件是
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
我使用了不同的选项-起初我得到了一个“connection in use”错误,我通过进入debug=False修复了这个错误,但坦率地说,我宁愿选择debug=True!我的主应用程序不在根目录中,这似乎有问题


提前感谢。

问题是
run.py
不小心调用
app.run
-这实际上调用了
werkzeug.service.run\u simple
,它启动一个子进程来处理传入的请求。。。在gunicorn下运行时,您不希望这样做(因为gunicorn将为您处理流程管理)

只需在你的
应用程序前添加
,如果
调用
,一切都会正常:

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

谢谢无法用一行解决方案击败简洁的答案。太感谢了,我没有工作@TheOnlyAnil-我想问另一个问题,用一个最小的可重复的例子来说明你的问题。考虑到上面的问题(这意味着您的代码可能不匹配,问题出在别处),这应该是可行的。