web-dev-qa-db-fra.com

Comment exécuter gunicorn à partir d'un dossier qui n'est pas le dossier de projet Django

J'ai cloné un projet dans mon dossier personnel, appelons-le /home/telessaude. Ainsi, la racine du projet est située à /home/telessaude/telessaude_branch_master

Si je suis dans le dossier Django home project (/ home/telessaude/telessaude_branch_master) et que j'émets une comman gunicorn telle que

gunicorn -w 2 -b 0.0.0.0:8000 telessaude.wsgi_dev:application --reload --timeout 900

gunicorn démarre et fonctionne très bien. Cependant ... si j'essaie d'exécuter la même commande sur un répertoire ci-dessus (/ home/telessaude), j'obtiens l'erreur suivante:

telessaude@ubuntu:~$ gunicorn -w 2 -b 0.0.0.0:8000 telessaude.wsgi_dev:application --reload --timeout 900
[2017-03-22 16:39:28 +0000] [10405] [INFO] Starting gunicorn 19.6.0
[2017-03-22 16:39:28 +0000] [10405] [INFO] Listening at: http://0.0.0.0:8000 (10405)
[2017-03-22 16:39:28 +0000] [10405] [INFO] Using worker: sync
[2017-03-22 16:39:28 +0000] [10410] [INFO] Booting worker with pid: 10410
[2017-03-22 16:39:28 +0000] [10410] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 136, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app
    __import__(module)
ImportError: No module named telessaude.wsgi_dev

J'ai aussi essayé de lancer gunicorn dans mon dossier personnel avec

gunicorn -w 2 -b 0.0.0.0:8000 telessaude_branch_master.telessaude.wsgi_dev:application --reload --timeout 900

et

gunicorn -w 2 -b 0.0.0.0:8000 /home/telessaude/telessaude_branch_master/telessaude.wsgi_dev:application --reload --timeout 900

mais aucun d'entre eux n'a également fonctionné. Quelqu'un peut-il me dire comment résoudre ce problème? J'ai besoin d'exécuter gunicorn à partir de n'importe quel dossier, car je dois l'ajouter en tant que paramètre "commande" au superviseur.

Je n'utilise pas un environnement virtuel.

12
Vini.g.fer

Vous devez ajouter votre application Django au chemin Python.

Dans le dernier gunicorn, vous pouvez essayer ceci:

Si le chemin racine de Django est /usr/local/src/djangoapp/.

Le settings.py le chemin par défaut serait /usr/local/src/djangoapp/djangoapp/settings.py.

gunicorn \
-c /usr/local/src/djangoapp/gunicorn_config.py \
--env Django_SETTINGS_MODULE=djangoapp.settings \
--pythonpath '/usr/local/src/djangoapp' \
djangoapp.wsgi:application
  • - c chemin du fichier de configuration
  • - chemin du module env du fichier settings.py dans votre projet Django
  • - pythonpath ajoutez votre chemin de projet à Python Path settings.html # pythonpath

--env et --pythonpath sont requis.

Le chemin relatif est également très bien!

0
m.kobe