2014-06-30 37 views
37

我有一個django應用程序,並嘗試將它設置爲gunicorn首先後來與主管和nginx。gunicorn.errors.HaltServer:<HaltServer'Worker無法啓動。' 3> django

該應用程序與普通的Django命令運行完全一樣python manage.py runserver

我使用PIP像pip install gunicorn和django的版本被安裝在gunicorn 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> 

那麼,爲什麼實際上遇到了上述錯誤,並解決了什麼問題?

回答

22

其實這裏的問題是WSGI文件本身,以前的Django 1.3之前的WSGI文件被命名爲.wsgi的延伸,但現在最近的版本將與和.py擴展,是WSGI文件必須創建是一個Python模塊

所以文件應該是hello_wsgi.py和命令應該是

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

我有一個類似的問題,我通過運行'gunicorn --log-file = -'有了一個更好的想法,這會直接在控制檯輸出日誌。 http://stackoverflow.com/a/25689349/1092815 – GabLeRoux

3

你不顯示完整的輸出。它可能看起來像

$ 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 

如果您看到這個錯誤,然後溶液被gunicorn與--chdir=/your/app/dir參數。

+0

你能解釋你的答案爲什麼它會起作用嗎? – Zulu

+1

即在** gunicorn.conf **內的gunicorn'exec'命令中,添加'--chdir ==/home/user/dir'('dir'是包含您的django項目的目錄)。 –

+0

添加這個參數對我來說並沒有削減它,我不得不首先cd到這個目錄,否則'gunicorn'沒有辦法找到我的項目。 – Yaron

1

我得到了同樣的錯誤。 Gunicorn以root身份執行時正在工作,但以非特權用戶身份執行時以此方式失敗。 在我的情況下,我安裝'數據集'python模塊與'pip安裝數據集',它擰上了權限/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包通過PIP自動安裝,但我還沒有發現究竟是什麼。此修復程序是從Fedora的包重新安裝:

dnf -y install python-yaml 
1

我也是在Ubuntu 16.04,Django的1.11也有類似的錯誤,使用systemd。

我的問題是,我已經把我的設置分成單獨的文件;即:而不是具有項目/ settings.py中的所有設置,我有幾個設置文件,如project/settings/dev.py。我不得不在工程中更新DJANGO_SETTINGS_MODULE/wsgi。PY文件來自:

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

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

然後gunicorn工作。