Django + gunicorn + virtualenv + questão Supervisord

6

Eu tenho um problema estranho com minha configuração virtualenv + gunicorn, apenas quando o gunicorn é lançado via supervisord. Eu sei que pode muito bem ser um problema com meu orientador e gostaria de receber qualquer feedback sobre um lugar melhor para pedir ajuda ...

Resumindo: quando eu uso o gunicorn do shell do meu usuário, dentro do meu virtualenv, tudo está funcionando perfeitamente. Consigo acessar todas as visualizações do meu projeto Django.

Quando o gunicorn é iniciado pelo supervisord na inicialização do sistema, tudo está OK.

Mas, se eu tiver que matar os processos do gunicorn_django, ou se eu executar uma reinicialização do supervisord, uma vez que o gunicorn_django tenha relançado, cada requisição será respondida com um estranho 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

Pilha completa disponível aqui: link

Estou correndo ...

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

configuração do 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"

configuração do supervisord:

[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

Algum conselho? Eu tenho sido preso por um bom tempo.

Parece um limite de memória estranho, já que não estou impondo nada de especial:

$ 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
    
por Florian Le Goff 14.02.2011 / 23:39

1 resposta

4

Eu rastreei esse aqui com a ajuda de davisp, um desenvolvedor de gúnios. Obrigada!

Foi um problema de ambiente, causado por uma configuração HOME inválida no ambiente do subprocesso supervisor gunicorn.

Eu não consegui nada no stderr até colocar um "import psycopg2" no meu arquivo settings.py, que produziu a seguinte mensagem nos arquivos stderr do supervisor para o 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'"

Eu adicionei a seguinte linha no meu arquivo de configuração do supervisor para o gunicorn, e agora o Python encontra seu caminho para um cache de ovo gravável u +. Está tudo bem.

environment=HOME='/home/hc'
    
por 15.02.2011 / 10:18