J'ai une application Flask que j'essaie de servir via Gunicorn.
J'utilise virtualenv et python3. Si j'active mon cd venv dans le répertoire de base de mon application, exécutez:
gunicorn mysite:app
Je reçois:
Starting gunicorn
Listening at http://127.0.0.1:8000
DEBUG:mysite.settings:>>Config()
...
Failed to find application: 'mysite'
Worker exiting
Shutting down: master
Reason: App failed to load
En regardant dans/etc/nginx/sites-available, je n'ai que le fichier 'default'. Dans les sites activés, je n'ai pas de fichier.
Dans mon fichier nginx.conf, j'ai:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Structure de l'application:
mysite #this is where I cd to and run gunicorn mysite:app
--manage.py
--/mysite
----settings.py
----__init__.py
dans manage.py
pour mysite j'ai:
logger.debug("manage.py entry point")
app = create_app(app_name)
manager = Manager(app)
if __name__ == "__main__":
manager.run()
Dans __init__.py
fichier:
def create_app(object_name):
app = Flask(__name__)
#more setup here
return app
Dans mon settings.py
dans le répertoire de l'application
class Config(object):
logger.debug(">>Config()") #this logs OK so gunicorn is at least starting in correct directory
De l'intérieur du virtualenv si je cours
print(sys.path)
Je trouve un chemin vers python et les sites-packages pour ce virtualenv.
D'après ce que j'ai lu pour démarrer gunicorn, il suffit de l'installer et d'exécuter gunicorn mysite: app
En exécutant gunicorn à partir du répertoire parent de mysite, je reçois le même échec pour trouver l'application: 'mysite', l'application n'a pas réussi à charger l'erreur, mais n'obtenez pas le DEBUG ... Config () enregistré (car nous sommes clairement dans le mauvais répertoire pour commencer). Exécuter gunicorn depuis mysite/mysite (clairement faux) J'obtiens et Exception dans le processus de travail ereor, ImportError: Aucun module nommé 'mysite'.
Avez-vous des indices sur la façon de faire fonctionner Gunicorn?
Vous pointez gunicorn sur mysite:app
, ce qui équivaut à from mysite import app
. Cependant, il n'y a pas d'objet app
en haut (__init__.py
) importation au niveau de mysite
. Dites à gunicorn d'appeler l'usine.
gunicorn "mysite:create_app()"
Vous pouvez également transmettre des arguments à l'appel.
gunicorn "mysite:create_app('production')"
En interne, cela équivaut à:
from mysite import create_app
app = create_app('production')
Vous pouvez également utiliser un fichier distinct qui effectue la configuration. Dans votre cas, vous avez déjà initialisé un app
dans manage.py
.
gunicorn manage:app