Gunicorn не может найти приложение, когда имя изменено из " application"

я использую gunicorn --workers 3 wsgi для запуска моего приложения колбы. Если я изменю переменную application to myapp, Gunicorn дает ошибку AppImportError: Failed to find application: 'wsgi'. Почему я получаю эту ошибку и как ее исправить?

myproject.py:

from flask import Flask

myapp = Flask(__name__)

@myapp.route("/")
def hello():
    return 'Test!'

if __name__ == "__main__":
    myapp.run(host='0.0.0.0')

wsgi.py:

from myproject import myapp

if __name__ == "__main__":
    myapp.run()

2 ответов


Gunicorn (и большинство серверов WSGI) по умолчанию ищет вызываемое имя application или app в любом модуле, на который вы укажете. Просто добавьте псевдоним from myproject import myapp as application или application = myapp позволит Gunicorn обнаружить вызываемый снова.

на wsgi.py файл или псевдоним не нужны, Gunicorn можно указать непосредственно на реальный модуль и вызываемый и даже вызвать фабрику приложений с аргументами. Отдельный wsgi.py файл не требуется в большинстве случаи.
gunicorn myproject:myapp --workers 16
# equivalent to "from myproject import myapp as application"

gunicorn 'myproject.app:create_app("production")' --workers 16
# equivalent to:
# from myproject.app import create_app
# application = create_app("production")

Gunicorn импортирует имя после": "Из пути перед ним. Если имеются круглые скобки, имя вызывается с аргументами для получения приложения. Если нет, предполагается, что это имя является приложением.


Если вы пытаетесь обслуживать приложение с именем app внутри server/app.py, вы можете запустить сервер на порту 8000 следующим образом:

gunicorn server.app:app -b 0.0.0.0:8000