J'utilise gunicorn --workers 3 wsgi
pour exécuter mon Flask. Si je change la variable application
en myapp
, Gunicorn donne l'erreur AppImportError: Failed to find application: 'wsgi'
. Pourquoi est-ce que 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()
Par défaut, Gunicorn (et la plupart des serveurs WSGI) recherchent l'appelable nommé application
ou app
dans le module vers lequel vous le pointez. Ajouter simplement un alias from myproject import myapp as application
ou application = myapp
permettra à Gunicorn de découvrir à nouveau l'appelable.
Cependant, le wsgi.py
fichier ou l'alias n'est pas nécessaire, Gunicorn peut être dirigé directement vers le module réel et appelable, et peut même appeler une fabrique d'applications avec des arguments. Un wsgi.py
le fichier 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 le ":" du chemin qui le précède. 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 diffuser 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