django settings.py os.environ.get(“X”)没有获取正确的值

时间:2015-06-23 11:34:19

标签: python linux django zsh boto

我正在尝试访问和获取(获取)OS环境变量的值到settings.py中,而在调试应用程序时,我得到该记录的无值。以下是更多细节:

有些重要/秘密密钥无法在代码中共享,因此会在OS环境变量中导出。每当我从linux终端或python shell(manage.py shell)回显$ KEY_VAL时,它就会输出我的环境变量的正确值。

但是在调试应用程序时,它显示值为None。我使用ipdb调试器和打印值与以下命令给出无结果:

p settings.KEY_VAL

在settings.py中,这些是获得os env变量的句子:

import os; KEY_VAL = os.environ.get("KEY_VAL")

我在我的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...

注意:我更改了变量名称和值。

但如果你能提供帮助,我很感激。

1 个答案:

答案 0 :(得分:2)

你的问题当然不是你的python代码。这在我们的许多django应用程序中完美运行。

我的猜测是你根本没有从zsh启动django服务器,因此没有加载.zshrc。对于标准的nginx / gunicorn设置来说肯定是这种情况,其中gunicorn作为守护进程运行,而不是通过交互式命令行运行。此外,可能是您没有使用相同的用户。

您可以通过在django应用中的某处添加以下代码来验证这一点:

import os
print os.environ
顺便说一下,你也可以通过.zshrc重新考虑注入你的环境变量。对于简单的设置,我们通常将它们保存在.env文件中,并使用https://github.com/jpadilla/django-dotenv在django启动时读取它们。安全方面,这与您的设置相同,但它不受登录用户的约束。