如何避免使用Django,nginx和uWSGI将环境变量放入多个位置?

时间:2014-05-15 06:39:52

标签: django nginx uwsgi

我正在尝试配置nginx + uWSGI来为我的Django应用程序提供服务。

当我将环境变量放入myapp_uwsgi.ini

uid = username
gid = username
env = DJANGO_SITE_KEY="..."

它按预期工作。

但是,我的应用程序有一些management commands,它也应该可以访问我定义的环境变量。

如果我将环境变量放到/home/username/.bashrc

export DJANGO_SITE_KEY="..."

uWSGI不加载它们。

我试图将环境变量放入一个单独的文件中:

#!/bin/sh
export DJANGO_SITE_KEY="..."

然后从.bashrc

调用它
. /home/username/environment

myapp_uwsgi.ini

exec-pre-app = . /home/username/environment

在uWSGI日志中,我看到这一行:

running ". /home/username/environment" (pre app)...

但我的Django应用程序无法使用os.environ访问环境变量。

我也尝试将export命令放到virtualenvwrapper的preactivate钩子上并使用uWSGI的virtualenv =设置,但它也不起作用(我假设钩子只是在使用像workon这样的virtualenvwrapper命令时执行。

3 个答案:

答案 0 :(得分:26)

以下是来自uWSGI开发人员的the answer

  

将它们中的每一个(每行一个)放在

形式的文本文件中      

VAR = VALUE

     

然后在uWSGI配置

[uwsgi]
for-readline = yourfile
  env = %(_)
endfor =

这也适用于yml配置文件:

  for-readline: filename
    env: %(_)
  endfor:

答案 1 :(得分:2)

我使用django-dotenv。将您的env变量放在项目中的.env文件中,然后将其加载到manage.py和wsgi.py中。无需其他配置。 uwsgi和manage.py命令将按预期工作,所有env变量只存储在一个文件中。

答案 2 :(得分:1)

另一种方法是使用配置管理系统,例如SaltAnsible

使用它们可以为uWSGI和Django创建Jinja模板,并在一个地方定义{{variables}}。