Python 在Django 1.11中通过wsgi读取Apache配置变量时遇到问题

Python 在Django 1.11中通过wsgi读取Apache配置变量时遇到问题,python,django,apache,wsgi,setenv,Python,Django,Apache,Wsgi,Setenv,我试图从Apache配置中读取数据库设置,结果出错。我尝试了许多其他问题的解决方案,但看起来这可能是Django 1.11版本的问题 这就是我所拥有的 在httpd.conf中: <VirtualHost *:80> .... SetEnv DB_NAME XYZ SetEnv DB_USER abc .... </VirtualHost> import os, sys BASE_DIR = os.path.dirname(os.pa

我试图从Apache配置中读取数据库设置,结果出错。我尝试了许多其他问题的解决方案,但看起来这可能是Django 1.11版本的问题

这就是我所拥有的

在httpd.conf中:

<VirtualHost *:80>
    ....

    SetEnv DB_NAME XYZ
    SetEnv DB_USER abc

    ....
</VirtualHost>
import os, sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..'))

sys.path.append(PROJECT_DIR)

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()

env_variables_to_pass = ['DB_NAME', 'DB_USER', ]

def application(environ, start_response):
  for var in env_variables_to_pass:
    os.environ[var] = environ.get(var, '')
  return _application(environ, start_response)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['DB_NAME'],
        'USER': os.environ['DB_USER'],

         ......
        },
    }
在设置中。py:

<VirtualHost *:80>
    ....

    SetEnv DB_NAME XYZ
    SetEnv DB_USER abc

    ....
</VirtualHost>
import os, sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..'))

sys.path.append(PROJECT_DIR)

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()

env_variables_to_pass = ['DB_NAME', 'DB_USER', ]

def application(environ, start_response):
  for var in env_variables_to_pass:
    os.environ[var] = environ.get(var, '')
  return _application(environ, start_response)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['DB_NAME'],
        'USER': os.environ['DB_USER'],

         ......
        },
    }
当我运行我的应用程序时,我得到了“内部服务器错误”

这是apache_error.log中的内容:

[wsgi:error] raise KeyError(key) from None\r
[wsgi:error] KeyError: 'DB_NAME'\r

}

SetEnv
仅设置每个请求的WSGI环境字典值,而不是进程范围的环境变量。您需要从
wsgi.py
文件中设置流程环境变量,或者从作为第一次导入
wsgi.py
文件的副作用处理的Python代码文件或配置文件中设置流程环境变量

Apache系统配置中唯一可以设置进程范围环境变量的地方是
envvars
文件,但并非Linux系统上的所有Apache发行版都支持该文件。也不推荐使用它,因为它为整个Apache而不是在Apache下运行的单个应用程序设置它们