Gunicorn ne peut pas trouver l'application lorsque le nom a changé de " application"
J'utilise gunicorn --workers 3 wsgi
pour exécuter mon Flacon d'application. Si je change la variable application
à myapp
, Gunicorn donne l'erreur AppImportError: Failed to find application: 'wsgi'
. Pourquoi j'obtiens cette erreur et comment la corriger?
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 réponses
Gunicorn (et la plupart des serveurs WSGI) recherche par défaut l'appelable nommé application
ou app
dans le module vers lequel vous le pointez. Il suffit d'ajouter un alias from myproject import myapp as application
ou application = myapp
pour permettre à Gunicorn de découvrir à nouveau L'appelable.
Cependant, le fichier wsgi.py
ou l'alias ne sont pas nécessaires, Gunicorn peut être pointé directement sur le module réel et appelable, et peut même appeler une usine d'applications avec des arguments. Un fichier wsgi.py
distinct n'est pas requis dans la plupart des cas.
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 importe le nom après les ":" à partir du chemin devant elle. S'il y a des parenthèses, le nom est appelé avec des arguments pour obtenir l'application. Sinon, le nom est supposé être l'application.
Si vous essayez de servir une application nommée app
dans server/app.py
, vous pouvez démarrer le serveur sur le port 8000, comme suit:
gunicorn server.app:app -b 0.0.0.0:8000