gyz*_*unk 5 apache django mod-wsgi wsgi
如何在Apache WSGI仅使用DJANGO_SETTINGS_MODULE环境变量启动时更改Django使用的设置文件?
在Django文档演示了如何对具有不同的WSGI应用程序文件实现这一点,但如果我们不希望创建一个专用的文件WSGI以及为我们不同的环境专用的设置文件,仅使用环境变量DJANGO_SETTINGS_MODULE中的Apache与SetEnv不sufficent .
该变量确实传递给application调用environ变量,但是django.conf检索这样的设置:
settings_module = os.environ[ENVIRONMENT_VARIABLE]
Run Code Online (Sandbox Code Playgroud)
它永远不会看到正确的变量.
由于只有一个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}
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
为此,您可以在应用程序的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)
Run Code Online (Sandbox Code Playgroud)
提示:不要忘记自定义myapp.settings字符串以匹配您的默认设置模块。
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |