Django игнорирует переменные среды при запуске через uWSGI

У меня есть веб-сайт django, который использует переменную среды DJANGO_MODE, чтобы решить, какие настройки использовать - разработку или постановку. Переменная среды находится в bashrc, и при запуске приложения с помощью сервера разработки все работает нормально.

Но когда я запускаю приложение с помощью uWSGI, оно, похоже, не замечает переменную среды и использует настройки по умолчанию (разработка) вместо производства.

Я запускаю uWSGI в режиме Императора, и, кроме игнорирования переменной среды, все работает нормально. И да, пользователь, запускающий uWSGI, тот же, для которого bashrc установлен DJANGO_MODE.

Команда, используемая для запуска uWSGI:

exec  uwsgi --emperor /etc/uwsgi/vassals --uid web_user --gid --web_user

И файл ini для вассала -

[uwsgi]
processes = 2
socket = /tmp/uwsgi.sock
wsgi-file = /home/web_user/web/project_dir/project/wsgi.py
chdir = /home/web_user/web/project_dir
virtualenv = /home/web_user/.virtualenvs/production_env
logger = syslog
chmod-socket = 777

person elssar    schedule 28.08.2013    source источник


Ответы (1)


Это не может работать, так как файлы конфигурации bash читаются bash. Вы должны установить вар у императора или у вассала (второй подход лучше). Просто добавь

env=DJANGO_MODE=foobar

в вашу конфигурацию (не используйте пробелы).

person roberto    schedule 28.08.2013
comment
добавьте немного печати, чтобы проверить, доступен ли DJANGO_MODE в os.environ, возможно, у вас есть какая-то другая проблема. Учтите, что DJANGO_SETTINGS_MODULE установлен в самом начале, поэтому проверка должна происходить в wsgi.py. - person roberto; 29.08.2013
comment
Дох! У меня был набор env с пробелами - env = DJANGO_MODE = mode, что вызывало проблемы. - person elssar; 29.08.2013
comment
У меня такая же проблема. Однако я не хочу помещать env vars в конфиг uWSGI, так как manage.py они тоже нужны. stackoverflow.com/questions/23670960 - person utapyngo; 15.05.2014