Python 在Django 1.11中通过wsgi读取Apache配置变量时遇到问题
我试图从Apache配置中读取数据库设置,结果出错。我尝试了许多其他问题的解决方案,但看起来这可能是Django 1.11版本的问题 这就是我所拥有的 在httpd.conf中: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
<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下运行的单个应用程序设置它们