Я пытаюсь запустить проект Django на сервере Debian с помощью Supervisor и Gunicorn. Когда я запускаю команду «SUDO supervisorctl начать gunicorn», я получаю следующее сообщение об ошибке:Невозможно запустить Django/Gunicorn через Supervisor
Traceback (most recent call last):
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
worker.init_process()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
self.wsgi = self.app.wsgi()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
__import__(module)
File "/srv/http/example.com/repo/conf/wsgi.py", line 28, in <module>
application = get_wsgi_application()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/home/smith/venvs/hash1/local/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/srv/http/example.com/repo/conf/settings/prod.py", line 2, in <module>
from conf.settings.base import *
File "/srv/http/example.com/repo/conf/settings/base.py", line 128, in <module>
MEDIA_ROOT = get_env_variable('MEDIA_ROOT')
File "/srv/http/example.com/repo/conf/settings/base.py", line 23, in get_env_variable
raise ImproperlyConfigured(error_msg)
ImproperlyConfigured: Set the MEDIA_ROOT environment variable
[2016-01-27 19:39:31 +0000] [30408] [INFO] Worker exiting (pid: 30408)
Моих base.py настройка базовых файлов читают переменные окружения, которые я установил в моем «hash1» виртуальная среда в postactivate крючок:
# base.py
def get_env_variable(var_name):
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the %s environment variable" % var_name
raise ImproperlyConfigured(error_msg)
# The rest of my settings...
Я подтвердил, что сообщение об ошибке «ImproperlyConfigured» генерируется с помощью этой функции в файле настроек.
Вот мой руководитель и gunicorn файлы:
# /etc/supervisor/conf.d/supervisor.conf
[program:gunicorn]
command=/srv/http/example.com/repo/bin/start-gunicorn
directory=/srv/http/example.com/repo
user=root
environment=MEDIA_ROOT="/var/www/swing/media/"
# start-gunicorn
#!/bin/bash
NAME=example
DJANGODIR=/srv/http/example.com/repo
USER=smith
GROUP=smith
WEBSITE=$NAME
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=conf.settings.prod
DJANGO_WSGI_MODULE=conf.wsgi
cd /home/smith/venvs/current/bin
source activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER \
--group=$GROUP \
--bind=127.0.0.1:8000 \
--access-logfile /var/log/gunicorn/access.log \
--error-logfile /var/log/gunicorn/error.log \
--pid /var/tmp/gunicorn.pid \
--log-level=info
Я использую wsgi.py по умолчанию и supervisord.conf файлы. Мои версии таковы:
Django 1.8.4
Debian 8.2
Supervisor 3.0r1-1 (Installed globally)
Gunicorn 19.3.0 (Installed in virtual environment "hash1")
Может ли кто-нибудь увидеть, что я делаю неправильно? Я бы не ожидал, что супервизор сможет увидеть переменные окружения, поэтому я установил переменную MEDIA_ROOT через параметр «среда» супервизора. Но руководитель все еще не видит этого. Я могу запустить пушки, когда запускаю сценарий запуска-пушки из командной строки. Я знаю, что делаю что-то глупое, но я не вижу этого.
Спасибо!
Вы действительно хотите запустить приложение как пользователь root **? –
Нет, но в этот момент я просто хотел бы, чтобы он запускался как * любой * пользователь. Если я смогу, по крайней мере, запустить его, то я могу посмотреть, как запустить его под моей учетной записью. Это всегда сбивает меня с толку, что означает, что вещи должны работать. Nginx и Apache довольно понятны для работы в качестве www-данных. Но стрелок и супервайзер? С ними я не уверен. – William