Ошибка запуска Gunicorn Supervisor

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

$ sudo supervisorctl start gunicorn
gunicorn: ERROR (abnormal termination)

В gunicorn_err.log повторяется следующее:

Unknown command: 'run_gunicorn'
Type 'manage.py help' for usage.

Конфигурация супервайзера выглядит так:

[program:gunicorn]
command=/home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
directory=/home/ubuntu/<APPNAME>
user=www-data
autostart=true
autorestart=true
stdout_logfile = /var/log/supervisor/gunicorn.log
stderr_logfile = /var/log/supervisor/gunicorn_err.log

Журнал gunicorn.log пуст. Я попытался изменить пользователя на ubuntu и работать без virtualenv (моя среда python «по умолчанию» также готова к работе, поскольку в ней есть все необходимые пакеты). Я даже пытался удалить пробелы между назначениями переменных в gunicorn. conf На самом деле, если я запущу вручную:

$ /usr/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
2013-01-22 19:20:33 [1231] [INFO] Starting gunicorn 0.17.2
2013-01-22 19:20:33 [1231] [INFO] Listening at: http://127.0.0.1:8000 (1231)
2013-01-22 19:20:33 [1231] [INFO] Using worker: gevent
2013-01-22 19:20:33 [1236] [INFO] Booting worker with pid: 1236
2013-01-22 19:20:33 [1237] [INFO] Booting worker with pid: 1237
2013-01-22 19:20:33 [1238] [INFO] Booting worker with pid: 1238
2013-01-22 19:20:33 [1239] [INFO] Booting worker with pid: 1239

И то же самое с запуском python virtualenv:

$ /home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent
2013-01-22 19:21:53 [1246] [INFO] Starting gunicorn 0.17.2
2013-01-22 19:21:53 [1246] [INFO] Listening at: http://127.0.0.1:8000 (1246)
2013-01-22 19:21:53 [1246] [INFO] Using worker: gevent
2013-01-22 19:21:53 [1251] [INFO] Booting worker with pid: 1251
2013-01-22 19:21:53 [1252] [INFO] Booting worker with pid: 1252
2013-01-22 19:21:53 [1253] [INFO] Booting worker with pid: 1253
2013-01-22 19:21:53 [1254] [INFO] Booting worker with pid: 1254

Как возможно, что руководитель, инициировавший gunicorn, не может найти команду run_gunicorn, когда я могу запустить ее, используя любую среду Python, и она работает? И да 'gunicorn', находится в INSTALLED_APPS


person Abdul Hfuda    schedule 22.01.2013    source источник


Ответы (1)


Оказывается, это была переменная окружения, которую я получал в settings.py, которой не существовало при старте супервизора gunicorn.

Кроме того, ошибка переменной среды подавлялась и никогда не попадала в файл gunicorn_err.log.

Когда я переключил команду gunicorn.conf на:

command = /usr/local/bin/gunicorn_django -w 4 -k gevent

Я мог видеть более четкую ошибку в gunicorn_err.log

    raise KeyError(key)
KeyError: 'AWS_STORAGE_BUCKET_NAME'
2013-01-22 22:51:09 [2290] [INFO] Worker exiting (pid: 2290)

Чтобы решить эту проблему, я просто не использовал переменную окружения, получил переменную другим способом. Затем это сработало, и я вернулся к исходной команде virtualenv run_gunicorn.

command=/home/ubuntu/.virtualenvs/<VIRTUALENV>/bin/python /home/ubuntu/<APPNAME>/manage.py run_gunicorn -w 4 -k gevent

Если важно продолжать использовать переменные среды в настройках, взгляните на supervisord-configuration. способ настройки пар переменных среды ключ/значение для приложений, выполняемых супервизором.

person Abdul Hfuda    schedule 22.01.2013