python - Gunicorn 不会启动 Flask 应用程序,因为 "Application object must be callable"

标签 python python-3.x flask gunicorn wsgi

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

我创建了一个简单的 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):
from python_pgfutter_importer import app as application

if __name__ == "__main__":
    application.main()

启动 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_pgfutter_importer/app.py ,看起来您在 wsgi.py 中的导入已关闭:

from python_pgfutter_importer import app as application

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

或者,您可以取消 wsgi.py如果你改变 wsgi:application在 Gunicorn 的命令行中到 python_pgfutter_importer.app:app . Docs .

关于python - Gunicorn 不会启动 Flask 应用程序,因为 "Application object must be callable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258168/

相关文章:

Python从同一目录导入文件: ModuleNotFoundError: No module named

python - 如何将日期解析为 argparse 的参数?

python - 无服务器 WSGI 本地服务器运行缓慢

python - 将多个生成器一起循环

python - Flask-paginate 在一页上显示所有结果

python - Flask-Restful - 返回带有嵌套数组的 json

python - 在 Python 中自动测试性能的正确方法(适用于所有开发人员)?

python-3.x - 比较 Pandas 中的 ID 日期组合

python - pyparsing部分匹配或递归限制命中

python - 如何在 Flask 中记录请求 POST 正文?