Приветствую всех.
Возникла необходимость использовать несколько баз данных, причём каждой URL должна соответствовать своя база. Например:
db1.server.com - база db1,
db2.server.com - база db2,
db3.server.com - база db3,
и т.д.
добавил в settings базы:
DATABASES = {
'default': {
'NAME': 'db1',
...
},
'db1': {
'NAME': 'db1',
...
},
'db2': {
'NAME': 'db2',
...
},
...
И middleware:
from django.conf import settings
class ChangeDBMiddleware(object):
def process_request(self, request):
settings.DATABASES['default'] = settings.DATABASES[request.META['HTTP_HOST'].split('.', 1)[0]]
Поставил его в самое начало в MIDDLEWARE_CLASSES.
В apache:
ServerName db1.server.com
ServerAlias db2.server.com
ServerAlias db3.server.com
...
Происходит следующее, часть запросов отрабатываются с выбранной базой, а часть с той которая была default (db1), причем после рестарта apache они могут отрабатываться по другому. Например, запрос db2.server.com/item/1 может взять элемент из db2, а db2.server.com/items из db1, после рестарта apache может быть наоборот.
Если прописываю локально в hosts:
127.0.0.1 db1.local
127.0.0.2 db2.local
127.0.0.3 db3.local
...
то локально через manage.py runserver всё отлично работает с серверными DB, db2.local/item/1 и db2.local/items всегда обращается к db2.
Как сделать что бы в зависимости от URL обращался к нужной базе ?
Updated 9 Sept. 2015, 8:59 by Kolyan.