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