Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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 Gunicorn赢得';无法启动烧瓶应用程序,因为;应用程序对象必须是可调用的;_Python_Python 3.x_Flask_Gunicorn_Wsgi - Fatal编程技术网

Python Gunicorn赢得';无法启动烧瓶应用程序,因为;应用程序对象必须是可调用的;

Python Gunicorn赢得';无法启动烧瓶应用程序,因为;应用程序对象必须是可调用的;,python,python-3.x,flask,gunicorn,wsgi,Python,Python 3.x,Flask,Gunicorn,Wsgi,这可能是一个Python noob问题,但在花了一整天的时间搜索之后,我找不到解决方案 我创建了一个简单的Flask应用程序,下面是python_pgfutter_importer/app.py的摘录: import os from flask import Flask, Blueprint from python_pgfutter_importer import settings from python_pgfutter_importer.api.importer.business imp

这可能是一个Python noob问题,但在花了一整天的时间搜索之后,我找不到解决方案

我创建了一个简单的Flask应用程序,下面是python_pgfutter_importer/app.py的摘录:

import os

from flask import Flask, Blueprint

from python_pgfutter_importer import settings
from python_pgfutter_importer.api.importer.business import import_csv
from python_pgfutter_importer.api.importer.endpoints.csv import ns as csv_importer_namespace
from python_pgfutter_importer.api.restplus import api

app = Flask(__name__)


def initialize_app(flask_app):
    blueprint = Blueprint('api', __name__, url_prefix='/api')
    api.init_app(blueprint)
    api.add_namespace(csv_importer_namespace)
    flask_app.register_blueprint(blueprint)


def main():
    initialize_app(app)
    app.run(debug=settings.FLASK_DEBUG, use_reloader=settings.FLASK_USE_RELOADER)


if __name__ == "__main__":
    main()
应用程序运行良好,我使用以下命令启动它:

python python_pgfutter_importer/app.py
现在我必须在服务器上托管这个应用程序,因此我必须使用WSGI。使用我能找到的所有教程,我编写了这个WSGI入口点(WSGI.py):

启动Gunicorn时,以下是CLI输出:

$gunicorn -b 127.0.0.1:8000 wsgi:application               
[2018-11-12 09:15:48 +0100] [11782] [INFO] Starting gunicorn 19.9.0
[2018-11-12 09:15:48 +0100] [11782] [INFO] Listening at: http://127.0.0.1:8000 (11782)
[2018-11-12 09:15:48 +0100] [11782] [INFO] Using worker: sync
[2018-11-12 09:15:48 +0100] [11785] [INFO] Booting worker with pid: 11785
Application object must be callable.
[2018-11-12 09:15:48 +0100] [11782] [INFO] Shutting down: Master
[2018-11-12 09:15:48 +0100] [11782] [INFO] Reason: App failed to load.
问题似乎是:应用程序对象必须是可调用的。

这没有任何意义,因为应用程序是Flask,当然是可调用的

我会错过什么


谢谢

鉴于您的路径是
python\u pgfutter\u importer/app.py
,您在
wsgi.py
中的导入似乎已关闭:

from python_pgfutter_importer import app as application
这使得
应用程序
成为一个模块对象,您需要的是一个应用程序:

from python_pgfutter_importer.app import app as application

或者,如果您将Gunicorn命令行中的
wsgi:application
更改为
python\u pgfutter\u importer.app:app
,则可能会删除
wsgi.py

谢谢,看起来好多了,Gunicorn开始了。但是请求没有得到答复。我在app.py:main()方法的开头放了一个日志,但它从未到达,似乎main()从未到达called@frinux它从未被调用,因为它由
保护,如果
。但是,如果您有Gunicorn,为什么需要手动运行它呢?main()方法包含应用程序初始化(调度器创建、应用程序配置,最后是app.run()方法)我把这段代码放在这里是不是错了?@frinux您可以在顶层调用
initialize\u app()
,例如,请参阅此问题的答案:Init代码确实可以放在app.py的第一级,就在main()方法之前。谢谢@Norrius!
from python_pgfutter_importer.app import app as application