我想更改环境变量DJANGO_SETTINGS_MODULE
(以及其他几个),然后重新加载所有相关模块,如django.conf
,django.db
等,以反映信息来自新的设置模块。新设置模块将具有不同的数据库。我将在中间件中执行此操作。
我通过重新加载一些模块以及django.conf
和django.db
来实现这一目标。所有新的SQL语句都是针对新数据库触发的。
但这似乎是如此hackish。
我想要这样做的主要原因是让不同的django应用程序(不同的设置而不是不同的应用程序)具有相同的apache子进程服务请求,而无需重新创建重新加载整个事物的新的apache子进程。 / p>
有没有一种干净的方式来实现我想做的事情?
谢谢,
更新(2014年9月19日):我接受了Daniel Roseman的回答,因为这似乎是问题背景下的现实。他建议的路由器方法是我探索但无法使用的,因为django的交易类不使用路由器。我认为路由器存在的原因不同。我正在处理的应用程序代码库非常庞大,对于默认或特定的数据库别名,有大量的transaction.commit_manually。我试图让它支持多个客户端数据库,而无需更改应用程序代码。 但是,我确实设法解决了支持多个客户端数据库和其他设置的主要问题。我没有尝试动态更改设置,也不使用路由器。我改为使用一个包含所有客户端数据库信息的settings.py.我修补了连接处理程序,以便为'默认'返回一个不同的数据库连接。别名(或代码使用的其他特定别名)基于中间件中设置的某些env变量。到目前为止,这已经很好了。如果我遇到任何问题,或者其他人可以指出该方法的潜在问题,我会发布更新。
答案 0 :(得分:0)
不,没有办法做到这一点,这是一件非常好的事情,因为这是一个坏主意。没有理由对不同的站点使用相同的Apache进程:相反,您应该为每个站点使用不同的虚拟主机,并让Apache管理它们。