web-dev-qa-db-ja.com

gunicorn.errors.HaltServer:<HaltServer「ワーカーの起動に失敗しました。」 3> django

Djangoアプリがあり、最初にスーパーバイザーとnginxでgunicornを使用してセットアップしようとしています。

アプリはpython manage.py runserverのような通常のDjangoコマンドで完全に実行されています

pip install gunicornおよびDjangoバージョンは1.5.3のようなpipを使用してgunicornをインストールしました

以下のような仮想環境内で以下のコマンドを実行すると

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>

では、なぜ実際に上記のエラーが発生し、修正されたのでしょうか?

実際には、ここでの問題はwsgiファイル自体でした。以前はDjango 1.3よりも前にwsgiファイルは.wsgiの拡張子で名前が付けられていましたが、最近のバージョンではwsgiファイルである.pyの拡張子は、pythonモジュールでなければなりません

ファイルはhello_wsgi.pyであり、コマンドは

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

完全な出力は表示されません。おそらく次のようになります

$ 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パラメーターを使用してgunicornを実行します。

8

--preloadを指定してguncornを実行すると、次のようなエラーログが表示されます。

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

これにより、通常、より詳細なエラーメッセージが表示されます。

5
john zhang

Ubuntu 16.04でも同様のエラーが発生しました。Django 1.11、systemdを使用しています。

私の問題は、設定を別々のファイルに分割していたことです。つまり、project/settings.pyにすべての設定があるのではなく、project/settings/dev.pyのような設定ファイルがいくつかあります。

Project/wsgi.pyファイルのDjango_SETTINGS_MODULEを次から更新する必要がありました。

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

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

その後、gunicornが機能しました。

4
mattdedek

私はまったく同じエラーを受け取りました。 Gunicorn はrootとして実行すると機能していましたが、非特権ユーザーとして実行するとこのように失敗しました。私の場合、「dataset」pythonモジュールを「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*

いくつかの別の問題は、pipによって自動インストールされるyamlパッケージに関するものでしたが、私は正確には何を見つけていません。修正は、Fedoraパッケージから再インストールすることでした:

dnf -y install python-yaml
1
Michal Ambroz

同じ問題に直面している人にとって、問題は通常Django自体にあります。あなたのvenvをアクティブにして./manage.py runserverを実行します

これにより、通常、より詳細なエラーメッセージが表示されます。

0
Vsevolod Gromov