jim*_*ish 5 python linux django zsh boto
我正在尝试访问并获取(获取)OS环境变量的值到settings.py中,而在调试应用程序时,我得到该记录的无值.这里有更多细节:
有一些重要/秘密密钥无法在代码中共享,因此这些密钥将在OS环境变量中导出.每当我从linux终端或python shell(manage.py shell)回显$ KEY_VAL时,它就会输出我的环境变量的正确值.
但在调试应用程序时,它显示值为None.我使用ipdb调试器和打印值与以下命令给出无结果:
p settings.KEY_VAL
Run Code Online (Sandbox Code Playgroud)
在settings.py中,这些是获得os env变量的句子:
import os; KEY_VAL = os.environ.get("KEY_VAL")
Run Code Online (Sandbox Code Playgroud)
我在我的ubuntu系统中使用ZSH.这是我的〜/ .zshrc文件:
#
# Executes commands at the start of an interactive session.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi
export KEY_VAL='SOME_JUNK_VAL'
fortune | cowsay | lolcat
# Customize to your needs...
Run Code Online (Sandbox Code Playgroud)
注意:我更改了变量名称和值.
但是如果你能提供帮助,我很感激.
你的问题肯定不在于你的Python代码。这在我们的许多 django 应用程序中都能完美运行。
我的猜测是你根本没有从 zsh 启动 django 服务器,因此 .zshrc 没有加载。对于标准 nginx/gunicorn 设置来说,情况确实如此,其中,gunicorn 作为守护进程运行,并且从不通过交互式命令行运行。另外,可能您没有使用同一用户。
您可以通过在 django 应用程序中的某处添加以下代码来验证这一点:
import os
print os.environ
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您还可以重新考虑通过 .zshrc 注入环境变量。对于简单的设置,我们通常将它们保存在 .env 文件中,并使用https://github.com/jpadilla/django-dotenv在 django 启动时读取它们。从安全角度来看,这与您的设置相同,但它不绑定到登录用户。
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |