python - hello - Gunicorn no puede encontrar la aplicación cuando el nombre cambió de "aplicación"
nginx gunicorn (2)
Uso gunicorn --workers 3 wsgi
para ejecutar mi aplicación Flask. Si cambio la application
la variable a myapp
, Gunicorn da el error AppImportError: Failed to find application: ''wsgi''
. ¿Por qué recibo este error y cómo lo soluciono?
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()
Gunicorn (y la mayoría de los servidores WSGI) utiliza de forma predeterminada la application
o app
con nombre que se puede llamar en cualquier módulo al que lo apunte. Simplemente agregando un alias from myproject import myapp as application
o application = myapp
, Gunicorn volverá a descubrir el llamador.
Sin embargo, el archivo wsgi.py
o el alias no son necesarios, Gunicorn se puede apuntar directamente al módulo real y se puede llamar, e incluso puede llamar a una fábrica de aplicaciones con argumentos. No se requiere un archivo wsgi.py
separado en la mayoría de los casos.
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 importa el nombre después de ":" del camino anterior. Si hay paréntesis, se llama al nombre con argumentos para obtener la aplicación. Si no, se asume que el nombre es la aplicación.
Si está tratando de servir una aplicación llamada app
en server/app.py
, puede iniciar el servidor en el puerto 8000 de la siguiente manera:
gunicorn server.app:app -b 0.0.0.0:8000