Gunicorn не запускает приложение Flask, потому что «объект приложения должен вызываться» - PullRequest
0 голосов
/ 12 ноября 2018

Возможно, это вопрос 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):

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 и, конечно, может вызываться.

Чего мне не хватает?

Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

Учитывая, что ваш путь 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 в командной строке Гуникорна на python_pgfutter_importer.app:app. Docs .

...