2014-06-30 2 views
37

मेरे पास एक django ऐप है और इसे पहले और बाद में पर्यवेक्षक और nginx के साथ बंदूक के साथ स्थापित करने की कोशिश कर रहा है।gunicorn.errors.HaltServer: <HaltServer 'वर्कर बूट करने में विफल रहा।' 3> django

एप्लिकेशन पूरी तरह से जैसे python manage.py runserver

मैं pip install gunicorn और Django संस्करण की तरह पिप उपयोग कर रहा है 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> 

तो वास्तव में उपरोक्त त्रुटि का सामना क्यों किया जाता है और क्या ठीक है?

उत्तर

22

असल समस्या यहाँ WSGI फ़ाइल स्वयं था, पहले से Django 1.3 से पहले WSGI फ़ाइल .wsgi का एक विस्तार के साथ नामित किया गया था, लेकिन अब हाल के संस्करणों में इसके साथ और .py का विस्तार है जो WSGI फ़ाइल चाहिए बनाया जाएगा हो एक अजगर मॉड्यूल

तो फ़ाइल 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> 

अंतिम ट्रैकबैक लगभग एक ही है, लेकिन इससे पहले कि आप आवश्यक जानकारियां देखें: --chdir=/your/app/dir पैरामीटर के साथ

ImportError: No module named elcarweb.wsgi 

आपको यह त्रुटि दिखाई है, तो समाधान चलाया जाता है gunicorn।

+0

क्या आप अपने उत्तर में समझा सकते हैं कि यह क्यों काम करेगा? – Zulu

+1

i.e. ** gunicorn.conf ** के भीतर अपने बंदूकधारक 'exec' कमांड में,' --chdir ==/home/user/dir' ('dir' अपनी django प्रोजेक्ट वाली निर्देशिका है) जोड़ें। –

+0

इस तर्क को जोड़ने से यह मेरे लिए कट नहीं हुआ, मुझे पहले इस निर्देशिका में 'सीडी' करना पड़ा अन्यथा 'बंदूक' के पास मेरी परियोजना को खोजने का कोई तरीका नहीं था। – Yaron

1

मुझे एक ही त्रुटि मिली। Gunicorn रूट के रूप में निष्पादित होने पर काम कर रहा था, लेकिन गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में निष्पादित होने पर इस तरह विफल रहा। मेरे मामले में मैं 'पाइप इंस्टॉल डेटासेट' के साथ 'डेटासेट' पायथन मॉड्यूल स्थापित करता हूं और यह केवल रूट खाते द्वारा पठनीय होने के लिए /usr/lib/python2.7/site-packages/dataset पर अनुमतियों को खराब कर देता है। निर्भरता के रूप में स्थापित अन्य मॉड्यूल पर सामान्यता थी।

फिक्स:

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

कुछ एक और मुद्दा YAML पैकेज पिप द्वारा स्वतः स्थापित किया साथ था, लेकिन मैं वास्तव में क्या नहीं मिली है। ठीक फेडोरा पैकेज से पुनर्स्थापित करने के लिए किया गया था:

dnf -y install python-yaml 
1

मैं भी उबंटू 16.04, जैंगो 1.11 में एक समान त्रुटि थी, systemd का उपयोग कर।

मेरी समस्या यह थी कि मैंने अपनी सेटिंग्स को अलग फाइलों में विभाजित कर दिया था; यानी: प्रोजेक्ट/सेटिंग्स.py में सभी सेटिंग्स रखने के बजाय, मेरे पास कुछ सेटिंग्स फ़ाइलें हैं जैसे प्रोजेक्ट/सेटिंग्स/dev.py।

मुझे परियोजना/wsgi में DJANGO_SETTINGS_MODULE अपडेट करना पड़ा।py फ़ाइल से:

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

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

तो के लिए काम किया gunicorn।

संबंधित मुद्दे