Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在Django设置文件中获取环境变量_Python_Linux_Django_Environment Variables_Django Settings - Fatal编程技术网

Python 无法在Django设置文件中获取环境变量

Python 无法在Django设置文件中获取环境变量,python,linux,django,environment-variables,django-settings,Python,Linux,Django,Environment Variables,Django Settings,我试图在Django设置中读取一些环境变量,我在/home/user/.bashrc(后者在/etc/bash.bashrc)中定义了这些环境变量,但我得到的只是一个keyrerror异常。我知道已经设置了环境变量,因为我可以在终端中打印它们(echo$VAR_NAME)。这应该是微不足道的 这是我正在使用的代码 from django.core.exceptions import ImproperlyConfigured msg = "Set the %s environment varia

我试图在Django设置中读取一些环境变量,我在/home/user/.bashrc(后者在/etc/bash.bashrc)中定义了这些环境变量,但我得到的只是一个keyrerror异常。我知道已经设置了环境变量,因为我可以在终端中打印它们(echo$VAR_NAME)。这应该是微不足道的

这是我正在使用的代码

from django.core.exceptions import ImproperlyConfigured

msg = "Set the %s environment variable"


def get_env_variable(var_name):
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = msg % var_name
        raise ImproperlyConfigured(error_msg)

OS_DB_USER = get_env_variable('MY_USER')
OS_DB_PASS = get_env_variable('MY_PASS')
OS_DB_DB = get_env_variable('MY_DB')
OS_GAME_LOGS = get_env_variable('DIR_LOGS')
我就是找不到丢失的东西。有什么建议吗

谢谢


编辑:使用mod_wsgi在Apache上运行。

我已通过使用此解决方案解决了我的问题:


我自己最近才找到了原因

在apache/mod_wsgi下运行时,应用程序在不同的用户下运行,因此不会设置这些环境变量。你的选择是:

  • 在virtualhost配置中使用apache SetEnv指令
  • 为apache运行代码的用户设置环境变量,或
  • 告诉apache以您的用户身份运行wsgidaemon进程

  • 您是如何运行服务器的?我正在使用mod_wsgi在Apache上运行我的项目。这些应该在virtualhost文件中定义吗?对于流程环境变量,这些变量都不能严格工作。SetEnv指令只设置每个请求的WSGI环境变量,而不设置进程环境变量。在Apache用户的环境中设置内容不会有帮助,因为Apache是以root用户身份启动的,并且继承了一个干净的默认主机环境。您不希望向全局默认主机环境添加内容。作为特定用户使用守护程序模式也不会有任何帮助,因为用户登录脚本永远不会执行,所以现在可以通过这种方式提取环境变量。最简单的方法是将任何流程环境变量设置为加载的WSGI脚本文件的副作用。