问题
I have a django website, that uses an environment variable, DJANGO_MODE
to decide which settings to use - development or staging. The environment variable is in the bashrc
and when running the app using the development server, everything works fine.
But when I run the app using uWSGI
, it doesn't seem to notice the environment variable and uses the default(development) settings instead of production.
I run uWSGI
in Emperor mode, and other than the environment variable ignoring, everything seems to be running fine. And yes, the user running uWSGI
is the same for which the bashrc
has DJANGO_MODE
set.
The command used to run uWSGI
is -
exec uwsgi --emperor /etc/uwsgi/vassals --uid web_user --gid --web_user
And the ini
file for the vassal -
[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
回答1:
It cannot work as bash config files are read by the bash. You have to set var in the emperor or in the vassal (the second one is a better approach). Just add
env=DJANGO_MODE=foobar
to your config (do not use whitespace).
来源:https://stackoverflow.com/questions/18487894/django-ignoring-environment-variables-when-run-via-uwsgi