如何避免使用Django、nginx和uWSGI将环境变量放入多个位置?
我正在尝试配置nginx+uWSGI以服务于我的Django应用程序 当我将环境变量放入如何避免使用Django、nginx和uWSGI将环境变量放入多个位置?,django,nginx,uwsgi,Django,Nginx,Uwsgi,我正在尝试配置nginx+uWSGI以服务于我的Django应用程序 当我将环境变量放入myapp\u uwsgi.ini: uid=username gid=用户名 env=DJANGO_SITE_KEY=“…” 它按预期工作 然而,我的应用程序有一些应该也可以访问我定义的环境变量 如果我将环境变量设置为/home/username/.bashrc: export DJANGO_SITE_KEY=“…” uWSGI不加载它们 我已尝试将环境变量放入一个单独的文件中: #/垃圾箱/垃圾箱 导
myapp\u uwsgi.ini
:
uid=username
gid=用户名
env=DJANGO_SITE_KEY=“…”
它按预期工作
然而,我的应用程序有一些应该也可以访问我定义的环境变量
如果我将环境变量设置为/home/username/.bashrc
:
export DJANGO_SITE_KEY=“…”
uWSGI不加载它们
我已尝试将环境变量放入一个单独的文件中:
#/垃圾箱/垃圾箱
导出DJANGO_站点_KEY=“…”
然后从两个调用它。bashrc
:
/主页/用户名/环境
和myapp\u uwsgi.ini
:
exec-pre-app=/主页/用户名/环境
在uWSGI日志中,我看到这一行:
正在运行“/home/username/environment”(应用前)。。。
但是我的Django应用程序无法使用os.environ
访问环境变量
我还尝试将export
命令放入virtualenvwrapper的preactivate
钩子,并使用uWSGI的virtualenv=
设置,但它也不起作用(我假设只有在使用virtualenvwrapper命令时才会执行钩子,如workon
这里是来自uWSGI开发者的:
只需将它们中的每一个(每行一个)放在表单中的文本文件中
VAR=价值
然后在uWSGI配置中
[uwsgi]
for-readline = yourfile
env = %(_)
endfor =
这也适用于yml配置文件:
for-readline: filename
env: %(_)
endfor:
另一种方法是使用配置管理系统,如或
有了它们,就可以用{{variables}为uWSGI和Django创建Jinja模板在一个位置定义。我使用。将您的环境变量放在项目中的.env这样的文件中,然后将其加载到manage.py和wsgi.py中。不需要其他配置。uwsgi和manage.py命令将按预期工作,并且您的所有环境变量都存储在一个文件中。对于管理命令,如何使用bash解析文本文件你的意思是解析
myapp_uwsgi.ini
?我认为这不是一个正确的方法。更改web服务器会破坏一切。不,是的,解析txt文件是正确的方法。我采用了你的方法,我正在用venv的激活脚本中的env变量解析txt文件。请注意,这些值不应该被引用,因为正在分析文件。如果您引用了它们,则在应用程序中使用它们时,必须从所有值中删除引号。使用此方法导出关键字如何?如果您使用任何需要知道特定目录和文件位置的工具,则导出环境变量非常有用。