Назад | Перейти на главную страницу

Django + gunicorn + virtualenv + проблема с супервизором

У меня странная проблема с моей настройкой virtualenv + gunicorn, только когда gunicorn запускается через supervisord. Я понимаю, что это вполне может быть проблемой с моим руководителем, и я был бы признателен за любые отзывы о лучшем месте, чтобы попросить о помощи ...

В двух словах: когда я запускаю gunicorn из своей пользовательской оболочки, внутри моего virtualenv, все работает безупречно. Я могу получить доступ ко всем представлениям моего проекта Django.

Когда gunicorn запускается супервизором при старте системы, все в порядке.

Но если мне нужно убить процессы gunicorn_django или если я выполняю перезапуск супервизора, после перезапуска этого gunicorn_django на каждый запрос отвечает странная Traceback:

(...)
  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

Я бегу...

Конфигурация пулеметчика:

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

Я отследил это с помощью Дэвиспа, разработчика Gunicorn. Спасибо !

Это была проблема среды, вызванная недопустимой настройкой HOME в среде подпроцесса supervisor gunicorn.

Я ничего не получал на stderr, пока не поместил "import psycopg2" в свой файл settings.py, который произвел следующее сообщение в файлах stderr supervisor для gunicorn.

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 +. Все в порядке.

environment=HOME='/home/hc'