django - 如何在 Apache 站点配置中为 Django 指定环境变量?
问题描述
如何为 Apache 站点指定环境变量?
我有一个由 Apache+ModWSGI 提供服务的多租户 Django 站点。每个站点都使用相同的 Django 代码,但它们的设置略有不同。环境变量告诉 Django 要加载哪些设置。目前,我正在获取一个单独的wsgi_<site_name>.py
文件,其中包含适用于每个站点的变量,但这违反了 DRY 规则。相反,我想将此变量放在 Apache 站点配置中,并wsgi.py
为所有站点使用一个文件。
我找不到太多关于如何做到这一点的信息。我发现这篇旧博客文章建议我可以使用 Apache 配置语法:
SetEnv SITE somename
连同一个 wsgi 文件,例如:
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'] = 'app.settings'
from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()
def application(environ, start_response):
os.environ['SITE'] = environ['SITE']
return _application(environ, start_response)
但这没有效果。如果我打印出SITE
变量,Django 永远不会收到值“somename”并显示默认值。
据我所知,mod_env组件仍然受支持,并且我已确认它已在我的服务器上安装并启用。
解决方案
问题是我打电话get_wsgi_application()
太早了。正确的代码是:
from django.core.wsgi import get_wsgi_application
def application(environ, start_response):
os.environ['SITE'] = environ['SITE']
_application = get_wsgi_application()
return _application(environ, start_response)
推荐阅读
- checkbox - 有没有办法在sharepoint中部分限制复选框选择?
- php - 尝试进入我的帐户部分时出现重定向 ERR_TOO_MANY_REDIRECTS prestashop 的问题
- sql-server - 如何在列中选择不同的值,然后显示派生列的总数?
- excel - 如何在Excel中合并具有相同ID的行?
- mapbox - 如何从 Mapbox 获取高程剖面数据?
- javascript - HTML/Javascript - checkValidity() 不显示需要的位置
- c# - 使用自定义配置扩展 OnModelCreating
- javascript - 如何在 Ajax Jquery 方法中使用 setTimeout() 防止关闭模式?
- xamarin.forms - 连续按钮点击传递到下一个按钮,如何防止
- javascript - 从函数的内部范围返回值