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()
25
demandé sur davidism 2015-10-28 01:03:23

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.

50
répondu davidism 2018-10-04 05:08:58

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
4
répondu duhaime 2018-03-21 16:43:24