web-dev-qa-db-fra.com

gunicorn.errors.HaltServer: <HaltServer 'Echec du démarrage de Worker.' 3> django

J'ai une application Django et j'essaye de la configurer avec gunicorn en premier et plus tard avec supervisor et nginx.

L'application est en cours d'exécution avec la commande normale Django parfaitement comme python manage.py runserver

J'ai installé le gunicorn à l'aide de pip like pip install gunicorn et Django est 1.5.3

quand je lance la commande ci-dessous à l'intérieur de l'env virtuel comme ci-dessous

gunicorn hello.wsgi:application -b xx.xxx.xxx.xx:8000 et a fait face à l'erreur

Traceback (most recent call last):
  File "/root/Envs/proj/bin/gunicorn", line 9, in <module>
    load_entry_point('gunicorn==19.0.0', 'console_scripts', 'gunicorn')()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 74, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 166, in run
    super(Application, self).run()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 71, in run
    Arbiter(self).run()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 169, in run
    self.manage_workers()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 477, in manage_workers
    self.spawn_workers()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 537, in spawn_workers
    time.sleep(0.1 * random.random())
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 209, in handle_chld
    self.reap_workers()
  File "/root/Envs/proj/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 459, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

Alors pourquoi réellement l'erreur ci-dessus est rencontrée et quelle est la solution?

49

En fait, le problème ici était le fichier wsgi lui-même, auparavant auparavant Django 1.3. Le fichier wsgi était nommé avec une extension de .wsgi, mais dans les versions récentes, il sera créé avec et extension de .py le fichier wsgi doit être un module python

le fichier doit donc être hello_wsgi.py et la commande devrait être

gunicorn  hello:application -b xx.xxx.xxx.xx:8000
27

Vous n'avez pas montré une sortie complète. Ça ressemble probablement à

$ gunicorn elcarweb.wsgi
[2015-10-27 21:01:47 +0000] [5429] [INFO] Starting gunicorn 19.2.1
[2015-10-27 21:01:47 +0000] [5429] [INFO] Listening at: http://127.0.0.1:8000 (5429)
[2015-10-27 21:01:47 +0000] [5429] [INFO] Using worker: sync
[2015-10-27 21:01:47 +0000] [5434] [INFO] Booting worker with pid: 5434
[2015-10-27 21:01:47 +0000] [5434] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 503, in spawn_worker
    worker.init_process()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 116, in init_process
    self.wsgi = self.app.wsgi()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: No module named elcarweb.wsgi
Traceback (most recent call last):
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 503, in spawn_worker
    worker.init_process()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 116, in init_process
    self.wsgi = self.app.wsgi()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: No module named elcarweb.wsgi
[2015-10-27 21:01:47 +0000] [5434] [INFO] Worker exiting (pid: 5434)
Traceback (most recent call last):
  File "/home/tomek/Elcar/elcarweb/env/bin/gunicorn", line 11, in <module>
    sys.exit(run())
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 74, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 189, in run
    super(Application, self).run()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 72, in run
    Arbiter(self).run()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 170, in run
    self.manage_workers()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 473, in manage_workers
    self.spawn_workers()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 537, in spawn_workers
    time.sleep(0.1 * random.random())
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 210, in handle_chld
    self.reap_workers()
  File "/home/tomek/Elcar/elcarweb/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 455, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

Le dernier trackback est presque identique, mais avant de voir les informations requises:

ImportError: No module named elcarweb.wsgi

Si vous voyez cette erreur, alors la solution est exécutée gunicorn avec --chdir=/your/app/dir paramètre.

8
Tomasz Jakub Rup

lancer guncorn avec --preload peut voir le journal des erreurs, comme ceci

gunicorn app:application --preload -b 0.0.0.0:5000 

Cela vous donnera généralement un message d'erreur plus détaillé.

5
john zhang

J'ai également eu une erreur similaire dans Ubuntu 16.04, Django 1.11, en utilisant systemd.

Mon problème était que j'avais divisé mes paramètres en fichiers séparés; c'est-à-dire qu'au lieu d'avoir tous les paramètres dans project/settings.py, j'ai quelques fichiers de paramètres comme project/settings/dev.py.

J'ai dû mettre à jour Django_SETTINGS_MODULE dans le fichier project/wsgi.py à partir de:

os.environ.setdefault("Django_SETTINGS_MODULE", "project.settings")  

à

os.environ.setdefault("Django_SETTINGS_MODULE", "project.settings.dev")

alors gunicorn a fonctionné.

4
mattdedek

J'ai la même erreur. Gunicorn fonctionnait lorsqu'il était exécuté en tant que root, mais échouait de cette façon lorsqu'il était exécuté en tant qu'utilisateur non privilégié. Dans mon cas, j'installe le 'dataset' python avec 'pip install dataset') et il a vissé les permissions sur /usr/lib/python2.7/site-packages/dataset ne doit être lisible que par le compte root. Sur un autre module installé en tant que dépendance, c'était la normalité.

Réparer :

chmod -R a+rX /usr/lib/python2.7/site-packages/dataset*
chmod -R a+rX /usr/lib/python2.7/site-packages/normality*

Le paquet yaml a été installé automatiquement par pip, mais je n’ai pas trouvé quoi au juste. Le correctif était de réinstaller à partir du paquet Fedora:

dnf -y install python-yaml
1
Michal Ambroz

Pour ceux qui font face au même problème, le problème est généralement lié à Django lui-même. Activez votre venv et exécutez ./manage.py runserver.

Cela vous donnera généralement un message d'erreur plus détaillé.

0
Vsevolod Gromov