Django - 根据服务器从wsgi引用不同的设置文件

问题描述 投票:6回答:3

我很惊讶我找不到与此相关的现有问题。也许有一个明显的答案,我忽略了。但是,让我说我的django项目名为“foo”。 fooxswpoi书鼓励在多个文件中定义foo的设置。

Two Scoops

Dev和prod是同一个repo的独立实例,这两个实例都是通过我的Webfaction帐户使用Apache提供的。对于开发站点我希望它使用settings/ local.py dev.py prod.py 和prod站点我希望它使用settings/dev.py。我的wsgi.py文件包含以下行:

settings/prod.py

这是我感到困惑的地方。如何用os.environ.setdefault("DJANGO_SETTINGS_MODULE", "foo.settings.prod") 加载开发站点?

我可以用多个文件替换wsgi.py,然后在每个httpd.conf文件中将WSGIScriptAlias分配给正确的wsgi文件吗?

foo.settings.dev

谢谢

django apache mod-wsgi web-deployment
3个回答
1
投票

如果我没记错的话,这两本书建议使用环境变量来设置各种设置 - 其中一个应该是django设置模块的位置。

因此,只需在开发系统中尝试设置和环境变量wsgi/ dev.py prod.py 等于“foo.settings.dev”,并在生产中尝试“foo.settings.prod”。

DJANGO_SETTINGS_MODULE只是将setdefaul设置为默认值,以防你自己没有定义它 - 你可以将它注释掉或者忽略它。


7
投票

另一种方法是让每个站点在不同的mod_wsgi守护进程组中运行。将这些守护程序进程组命名为“local”,“dev”和“prod”。

在您的WSGI脚本文件中,您可以使用:

DJANGO_SETTINGS_MODULE

换句话说,使用mod_wsgi守护程序进程组的名称来动态选择配置。


0
投票

你可以做的是使用应该在wsgi文件的路径中选择的设置的名称。假设你的wsgi的路径是import mod_wsgi os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings.%s' % mod_wsgi.process_group ,那么你可以在该文件中执行以下操作:

/www/production/django_project_name/wsgi.py
© www.soinside.com 2019 - 2024. All rights reserved.