【问题标题】:"os.environ" in django settings.py cannot get system environment variables with apache and wsgidjango settings.py 中的“os.environ”无法使用 apache 和 wsgi 获取系统环境变量
【发布时间】:2013-05-23 11:06:08
【问题描述】:

我这样设置 django setting.py:

import os
from django.core.exceptions import ImproperlyConfigured
def get_env_variable(var_name):
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = "Set the %s environment variable" % var_name
        raise ImproperlyConfigured(error_msg)

环境变量配置正确。使用 django 内置 Web 服务器时,一切正常。但是使用 apache 和 wsgi,它引发了 KeyError。

根据Cannot get environment variables in Django settings file,问题解决了。但是为什么apache不能获取系统环境变量呢?

更新: 环境变量在 .bashrc 中设置。

【问题讨论】:

  • 你是如何设置这些变量的?不要忘记 Apache 将以自己的用户身份运行。
  • “配置正确”是指使用SetEnv 指令在Apache 配置中设置它们? IIRC,Apache 清除环境,所以你需要有指令来公开你需要的环境变量。

标签: python django apache environment-variables wsgi


【解决方案1】:

你说“环境变量是在 .bashrc 中设置的”。大概你的意思是你的 .bashrc。这是没有意义的,因为 Apache 不是以您的身份运行,而是以 Apache 用户的身份运行。

正如您链接到的问题中引用的博文中所述,您需要通过 SetEnv 指令在 Apache 配置文件本身中设置环境变量。

【讨论】:

  • 除非单独的 SetEnv 指令不会导致为在 mod_wsgi 下运行的 WSGI 应用程序设置进程范围的环境变量。这只是因为他们使用 WSGI 包装器从 WSGI 环境中读取它们并在每个请求上强制设置它们。这样做实际上是不好的做法,也是不明智的。最好在 WSGI 脚本文件的开头简单地设置它们,这样它们只在第一次加载 WSGI 脚本文件时设置一次。
  • 如何在 WSGI 脚本文件的开头设置它们,Graham?
  • @GrahamDumpleton,也对此感到好奇吗?如果我们不为各种环境维护多个 wsgi.py 文件,怎么办?谢谢。
【解决方案2】:

您在 settings.py 中设置的任何环境都将仅应用于该实例的环境变量,它们不会更改将被称为 apache 的系统环境变量。

【讨论】:

  • 如果您在 Windows 中工作,那么您可以执行类似的操作来设置用户特定的系统环境。 os.system("setx key value")
  • 环境变量在.bashrc中设置。
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 2020-06-23
  • 2015-03-16
  • 2013-12-04
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多