web-dev-qa-db-ja.com

Django + gunicorn + virtualenv +監視対象の問題

Virtualenv + gunicornのセットアップに奇妙な問題がありますが、gunicornがsupervisordを介して起動された場合のみです。私はそれが私の監督者の問題である可能性が非常に高いことを認識しています。助けを求めるためのより良い場所についてのフィードバックをいただければ幸いです...

一言で言えば、virtualenv内でユーザーShellからgunicornを実行すると、すべてが問題なく機能しています。 Djangoプロジェクトのすべてのビューにアクセスできます。

システムの起動時に監視者がgunicornを起動すると、すべて問題ありません。

しかし、gunicorn_Djangoプロセスを強制終了する必要がある場合、または監視対象の再起動を実行する場合、そのgunicorn_Djangoが再起動されると、すべてのリクエストは奇妙なトレースバックで応答されます。

(...)
  File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.Egg/Django/db/__init__.py", line 77, in
    connection = connections[DEFAULT_DB_ALIAS]
  File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.Egg/Django/db/utils.py", line 92, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.Egg/Django/db/utils.py", line 50, in load_backend
    raise ImproperlyConfigured(error_msg)
TemplateSyntaxError: Caught ImproperlyConfigured while rendering: 'Django.db.backends.postgresql_psycopg2' isn't an available database backend.
Try using Django.db.backends.XXX, where XXX is one of:
    'dummy', 'mysql', 'Oracle', 'postgresql', 'postgresql_psycopg2', 'sqlite3'
Error was: cannot import name utils

ここで利用可能なフルスタック: http://Pastebin.com/BJ5tNQ2N

私は走っています...

  • Ubuntu/maverick(最新)
  • Python = 2.6.6
  • virtualenv = 1.5.1
  • gunicorn = 0.12.0
  • Django = 1.2.5
  • psycopg2 = '2.4-beta2(dt dec pq3 ext)'

gunicornの構成:

backlog = 2048
bind = "127.0.0.1:8000"
pidfile = "/tmp/gunicorn-hc.pid"
daemon = True
debug = True
workers = 3
logfile = "/home/hc/prod/log/gunicorn.log"
loglevel = "info"

監視対象構成:

[program:gunicorn]
directory=/home/hc/prod/hc
command=/home/hc/prod/venv/bin/gunicorn_Django -c /home/hc/prod/hc/gunicorn.conf.py
user=hc
umask=022
autostart=True
autorestart=True
redirect_stderr=True

何かアドバイス ?私はかなり長い間これに固執しています。

私は特別なことを何も強制していないので、それはいくつかの奇妙なメモリ制限のようです:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
6
Florian Le Goff

Gunicornの開発者であるdavispの助けを借りて、これを追跡しました。ありがとうございました !

これは、スーパーバイザーgunicornサブプロセスの環境での無効なHOME設定が原因で発生した環境の問題でした。

Settings.pyファイルに「importpsycopg2」を入れるまで、stderrには何も表示されませんでした。これにより、gunicornのスーパーバイザーのstderrファイルに次のメッセージが表示されました。

Error: Can't extract file(s) to Egg cache

The following error occurred while trying to extract file(s) to the Python Egg cache:

  [Errno 13] Permission denied: '/root/.python-eggs'"

Gunicornのスーパーバイザー構成ファイルに次の行を追加しました。Pythonはu +書き込み可能なEggキャッシュへの道を見つけました。すべて問題ありません。

environment=HOME='/home/hc'
4
Florian Le Goff