django settings.py os.environ.get("X") 没有获取正确的值
django settings.py os.environ.get("X") not fetching correct values
我正在尝试访问 OS 环境变量的值并将其提取(获取)到 settings.py 中,并且在调试应用程序时我获取了该记录的 None 值。以下是更多详细信息:
有些 important/secret 键无法在代码中共享,因此 ose 在 OS 环境变量中导出。每当我从 linux 终端或 python shell (manage.py shell) 执行 echo $KEY_VAL 时,它都会打印出我的环境变量的正确值。
但是在调试应用程序时,显示值为None。我正在使用 ipdb 调试器并使用以下命令打印值结果为 None:
p settings.KEY_VAL
在settings.py中,这些是获取os环境变量的语句:
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...
注意:我已经更改了变量名称和值。
但如果您能提供帮助,我将不胜感激。
您的问题肯定不是您的 python 代码。这在我们的许多 Django 应用程序中都能完美运行。
我猜你根本没有从 zsh 启动 django 服务器,因此没有加载 .zshrc。对于标准 nginx/gunicorn 设置来说肯定是这种情况,其中 gunicorn 运行 作为守护进程并且从不通过交互式命令行。另外,可能是因为您没有为此使用同一用户。
您可以通过在 Django 应用中的某处添加以下代码来验证这一点:
import os
print os.environ
顺便说一句,您也可以重新考虑通过 .zshrc 注入环境变量。对于简单的设置,我们通常将它们保存在一个 .env 文件中,并使用 https://github.com/jpadilla/django-dotenv 在 django 启动时读取它们。在安全方面,这与您的设置相同,但它不绑定到登录用户。
我正在尝试访问 OS 环境变量的值并将其提取(获取)到 settings.py 中,并且在调试应用程序时我获取了该记录的 None 值。以下是更多详细信息:
有些 important/secret 键无法在代码中共享,因此 ose 在 OS 环境变量中导出。每当我从 linux 终端或 python shell (manage.py shell) 执行 echo $KEY_VAL 时,它都会打印出我的环境变量的正确值。
但是在调试应用程序时,显示值为None。我正在使用 ipdb 调试器并使用以下命令打印值结果为 None:
p settings.KEY_VAL
在settings.py中,这些是获取os环境变量的语句:
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...
注意:我已经更改了变量名称和值。
但如果您能提供帮助,我将不胜感激。
您的问题肯定不是您的 python 代码。这在我们的许多 Django 应用程序中都能完美运行。
我猜你根本没有从 zsh 启动 django 服务器,因此没有加载 .zshrc。对于标准 nginx/gunicorn 设置来说肯定是这种情况,其中 gunicorn 运行 作为守护进程并且从不通过交互式命令行。另外,可能是因为您没有为此使用同一用户。
您可以通过在 Django 应用中的某处添加以下代码来验证这一点:
import os
print os.environ
顺便说一句,您也可以重新考虑通过 .zshrc 注入环境变量。对于简单的设置,我们通常将它们保存在一个 .env 文件中,并使用 https://github.com/jpadilla/django-dotenv 在 django 启动时读取它们。在安全方面,这与您的设置相同,但它不绑定到登录用户。