我试图从Apache配置中读取数据库设置并获取错误。我尝试了其他问题的许多解决方案,但看起来这可能是Django 1.11版本问题。
这就是我所拥有的。
在httpd.conf中:
<VirtualHost *:80>
....
SetEnv DB_NAME XYZ
SetEnv DB_USER abc
....
</VirtualHost>
在wsgi.py中:
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)
在settings.py中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['DB_NAME'],
'USER': os.environ['DB_USER'],
......
},
}
当我运行我的应用程序时,我发现内部服务器错误&#39;。
这是apache_error.log中的内容:
[wsgi:error] raise KeyError(key) from None\r
[wsgi:error] KeyError: 'DB_NAME'\r
}
答案 0 :(得分:0)
SetEnv
仅设置每个请求WSGI环境字典值,而不是进程范围的环境变量。您需要设置来自wsgi.py
文件的进程环境变量,或者从作为第一次导入wsgi.py
文件的副作用处理的Python代码文件或配置文件中设置进程环境变量。
Apache的系统配置中唯一可以设置流程范围环境变量的地方是envvars
文件,但不是Linux系统支持的所有Apache发行版。它也不推荐使用,因为它为整个Apache设置它们,而不是在Apache下运行的单个应用程序。