如何在Apache WSGI仅使用DJANGO_SETTINGS_MODULE
环境变量启动时更改Django使用的设置文件?
Django documentation显示了如何使用不同的WSGI应用程序文件实现此目的,但如果我们不想为我们的不同环境创建专用的WSGI文件以及专用的设置文件,则仅使用环境变量<{1}}在Apache中的DJANGO_SETTINGS_MODULE
是不够的。
该变量确实传递给SetEnv
变量application
调用,但environ
检索如下设置:
django.conf
它永远不会看到正确的变量。
答案 0 :(得分:6)
由于只有一个Django应用程序实例可以在Python子解释器的上下文中运行,因此使用mod_wsgi执行操作的最佳方法是将需要不同设置的每个不同的Django站点专用于不同的mod_wsgi守护程序进程基。
在执行此操作时,请使用mod_wsgi守护程序进程组的名称,该名称反映应使用的设置文件的名称,然后在WSGI脚本文件的全局范围内,根据名称设置DJANGO_SETTINGS_MODULE
mod_wsgi守护程序进程组。
Apache配置因此具有:
WSGIDaemonProcess mysite.settings_1
WSGIDaemonProcess mysite.settings_2
WSGIScriptAlias /suburl process-group=mysite.settings_2 application-group=%{GLOBAL}
WSGIScriptAlias / process-group=mysite.settings_1 application-group=%{GLOBAL}
和WSGI脚本文件:
import os
try:
from mod_wsgi import process_group
except ImportError:
settings_module = 'mysite.settings'
else:
settings_module = process_group
os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
答案 1 :(得分:0)
要实现这一点,您可以在应用程序的wsgi.py
文件中使用以下代码:
import os
from django.core.wsgi import get_wsgi_application
def application(environ, start_response):
_application = get_wsgi_application()
os.environ['DJANGO_SETTINGS_MODULE'] = environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
return _application(environ, start_response)
提示:不要忘记自定义myapp.settings
字符串以匹配您的默认设置模块。