2013-08-28 84 views
7

我有一个django网站,它使用环境变量DJANGO_MODE来决定使用哪些设置 - 开发或分段。环境变量在bashrc中,当使用开发服务器运行应用程序时,一切正常。Django在通过uWSGI运行时忽略环境变量

但是,当我运行应用程序使用uWSGI,它似乎没有注意到环境变量,并使用默认(开发)设置,而不是生产。

我在Emperor模式下运行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 

回答

9

如bash的配置文件是由bash的阅读它不能正常工作。你必须在皇帝或附庸中设置var(第二个是更好的方法)。只需添加

env=DJANGO_MODE=foobar 

到您的配置(不要使用空格)。

+0

我试过在附件中加入,没有工作。 – elssar

+0

添加一些打印以检查在os.environ中是否有DJANGO_MODE,也许还有其他类型的问题。考虑到DJANGO_SETTINGS_MODULE设置在一开始,所以检查必须发生在wsgi.py – roberto

+1

Doh!我在env中设置了空格 - env = DJANGO_MODE = mode',这导致了问题。 – elssar