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