2014-06-30 8 views
37

Mam aplikację django i próbuję ją skonfigurować najpierw gunicornem, a później superwizorem i nginxem.gunicorn.errors.HaltServer: Nie powiodło się uruchomienie <HaltServer 'Worker.' 3> django

Aplikacja działa z normalną polecenia django doskonale jak python manage.py runserver

Zainstalowalem gunicorn użyciu pip jak pip install gunicorn i wersji Django 1.5.3

gdy uruchamiam polecenie poniżej wewnątrz wirtualnego env jak poniżej

gunicorn hello.wsgi:application -b xx.xxx.xxx.xx:8000 i wychodził błąd

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> 

Dlaczego więc napotkano powyższy błąd i jaka jest poprawka?

Odpowiedz

22

W rzeczywistości problemem był sam plik wsgi, wcześniej przed django 1.3 plik wsgi został nazwany z rozszerzeniem .wsgi, ale teraz w najnowszych wersjach zostanie utworzony z rozszerzeniem .py czyli plik wsgi musi być moduł Pythona

więc plik powinien być hello_wsgi.py i polecenie powinno być

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

Miałem podobny problem i miałem lepsze pojęcie o problemie, uruchamiając 'gunicorn --log-file = -', to wypisze log prosto w konsoli. http://stackoverflow.com/a/25689349/1092815 – GabLeRoux

3

nie wykazał pełną moc. To prawdopodobnie wygląda

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

Ostatni Trackback jest prawie taka sama, ale przed Widzisz wymaganych informacji:

ImportError: No module named elcarweb.wsgi 

Jeśli widzisz ten błąd, to rozwiązanie jest uruchamiany gunicorn z --chdir=/your/app/dir parametru.

+0

Czy możesz wyjaśnić w swojej odpowiedzi, dlaczego to zadziała? – Zulu

+1

tj. W twoim gunicorn 'exec' w ciągu ** gunicorn.conf **, dodaj' --chdir ==/home/user/dir' ('dir' jest katalogiem zawierającym twój projekt django). –

+0

Dodanie tego argumentu nie zakończyło się dla mnie, musiałem "cd" do tego katalogu najpierw inaczej "gunicorn" nie mógł znaleźć mojego projektu. – Yaron

1

Mam ten sam błąd. Gunicorn działał po uruchomieniu jako root, ale nie powiodło się w ten sposób, gdy został wykonany jako użytkownik nieuprzywilejowany. W moim przypadku zainstalowałem moduł python 'dataset' z 'pip install dataset' i wkręcił on uprawnienia na /usr/lib/python2.7/site-packages/dataset, aby był czytelny tylko dla konta root. Na innym module zainstalowanym jako zależność taka była normalność.

Fix:

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

Jakiś inny problem był z pakietem YAML automatycznie zainstalowane przez PIP, ale nie znalazłem, co dokładnie. Poprawka była ponowna instalacja z pakietu fedora:

dnf -y install python-yaml 
1

miałem też podobny błąd w Ubuntu 16.04, Django 1.11, używając Systemd.

Moim problemem było to, że podzieliłem moje ustawienia na osobne pliki; tj: zamiast wszystkich ustawień w projekcie/settings.py mam kilka plików ustawień, takich jak project/settings/dev.py.

Musiałem zaktualizować DJANGO_SETTINGS_MODULE w projekcie/wsgi.Plik py od:

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

do

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

następnie gunicorn pracował.

Powiązane problemy