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

uta*_*ngo 13 django nginx uwsgi

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

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

uid = username
gid = username
env = DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

但是,我的应用程序有一些管理命令,它们也应该可以访问我定义的环境变量.

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

export DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

uWSGI不加载它们.

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

#!/bin/sh
export DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

然后从两个调用它.bashrc:

. /home/username/environment
Run Code Online (Sandbox Code Playgroud)

并且myapp_uwsgi.ini:

exec-pre-app = . /home/username/environment
Run Code Online (Sandbox Code Playgroud)

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

running ". /home/username/environment" (pre app)...
Run Code Online (Sandbox Code Playgroud)

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

我也曾尝试把export命令到preactivatevirtualenvwrapper的钩和使用virtualenv =uWSGI的设置,但它并没有太多的工作(我假设使用virtualenvwrapper命令喜欢当钩子才执行workon.

uta*_*ngo 28

以下是uWSGI开发人员的答案:

只需将每个(每行一个)放在表单中的文本文件中

VAR = VALUE

然后在uWSGI配置中

[uwsgi]
for-readline = yourfile
  env = %(_)
endfor =
Run Code Online (Sandbox Code Playgroud)

这也适用于yml配置文件:

  for-readline: filename
    env: %(_)
  endfor:
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在解析文件时,不应引用值**,因为[uWSGI不会删除引号](https://github.com/unbit/uwsgi/issues/1089).如果您引用它们,则必须在应用程序中使用它们时从所有值中删除引号. (2认同)