使用Supervisor管理uWSGI进程的Django应用程序无法读取环境变量问题解决
项目中通过配置环境变量区分生产、开发、测试环境,代码如下:
WSGI_ENV = os.environ.get("DJANGO_CONF_MODULE", "")
RUN_MODE = 'DEVELOP'
if WSGI_ENV.endswith("production"):
RUN_MODE = "PRODUCT"
DEBUG = False
elif WSGI_ENV.endswith("testing"):
RUN_MODE = "TEST"
DEBUG = False
else:
RUN_MODE = "DEVELOP"
DEBUG = True
项目部署在服务器上后,发现配置的环境变量没起作用,这就奇了怪了,一时半会还真没找到原因,只能通过在配置文件里写死环境配置了。
今天一时兴起,又想来揪出这问题,无意中发现在手动启动uwsgi进程时,程序是能读取到配置系统的环境变量,使用Supervisor管理的uwsgi进程无法读取到,好了,问题就此揪出了。
解决方案:
Supervisor在program的配置文件中有environment配置,项目中的环境变量需要配置在此。
[program:xxx]
command=/usr/local/bin/uwsgi --ini /project/xxx/uwsgi.ini
directory=/project/xxx
user=root
numprocs=1
stdout_logfile=/var/log/django/xxx.log
stderr_logfile=/var/log/django/xxx.log
autostart=true
autorestart=true
startsecs=10
priority=997
environment=DJANGO_CONF_MODULE="production"