Подтвердить что ты не робот

Gunicorn.errors.HaltServer: <HaltServer 'Рабочий не смог загрузить.' 3> django

У меня есть приложение django и сначала пытаюсь настроить его с помощью пушки, а затем с супервизором и nginx.

Приложение работает с нормальной командой django, как python manage.py runserver

Я установил пулемет, используя пип, как pip install gunicorn, а версия django 1.5.3

когда я запускаю команду ниже внутри виртуального env, как показано ниже

gunicorn hello.wsgi:application -b xx.xxx.xxx.xx:8000 и столкнулся с ошибкой

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>

Итак, почему на самом деле ошибка выше встречается и что исправление?

4b9b3361

Ответ 1

На самом деле проблема заключалась в самом файле wsgi, ранее перед django 1.3 файл wsgi был назван с расширением .wsgi, но теперь в последних версиях он будет создан с расширением .py и расширением .py Файл wsgi должен быть модулем python

поэтому файл должен быть hello_wsgi.py, а команда должна быть

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

Ответ 2

Вы не показываете полный вывод. Вероятно, он выглядит как

$ 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>

Последний трекбэк почти то же самое, но прежде чем вы увидите требуемую информацию:

ImportError: No module named elcarweb.wsgi

Если вы видите эту ошибку, тогда решение запускается с пушкой с параметром --chdir=/your/app/dir.

Ответ 3

запустите guncorn с --preload, чтобы увидеть журнал ошибок, например

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

Это обычно дает вам более подробное сообщение об ошибке.

Ответ 4

У меня также была аналогичная ошибка в Ubuntu 16.04, Django 1.11, используя systemd.

Моя проблема заключалась в том, что я разделил свои настройки на отдельные файлы; т.е.: вместо всех настроек в файле project/settings.py у меня есть несколько файлов настроек, таких как project/settings/dev.py.

Мне нужно было обновить DJANGO_SETTINGS_MODULE в файле project/wsgi.py с помощью

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

к

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

тогда стрельба работала.

Ответ 5

Я получил ту же ошибку. Gunicorn работал, когда выполнялся как root, но при этом выполнялся как недопустимый пользователь. В моем случае я устанавливаю модуль python 'dataset' с помощью 'pip install dataset', и он разрезал разрешения на /usr/lib/python2.7/site-packages/dataset для чтения только для учетной записи root. На другом модуле, установленном в качестве такой зависимости, была нормальность.

Исправление:

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

Еще одна проблема заключалась в том, что пакет yaml автоматически устанавливался на пипсе, но я точно не нашел. Исправлено переустановка из пакета fedora:

dnf -y install python-yaml

Ответ 6

Для тех, кто сталкивается с той же проблемой, проблема, как правило, что-то в самом Django. Активируйте ваш venv и запустите. /manage.py runserver

Это обычно дает вам более подробное сообщение об ошибке.