"каркас сайтов" в одном экземпляре django - PullRequest
6 голосов
/ 17 июня 2009

Я хочу обслуживать специализированные RSS-каналы на другом поддомене, чем остальная часть сайта.

Можно ли использовать каркас сайтов для использования другого файла urls.py и settings.py в одном экземпляре django . или мне нужно установить два расположения apache и просто установить разные файлы settings.py в apache conf.

Причина, по которой мне нужно настроить два файла urls.py, состоит в том, чтобы избежать дублирования содержимого. Я не хочу, чтобы основной сайт был доступен по адресу rss.example.com, и я не хочу, чтобы специализированные каналы были доступны на example.com

Было бы идеально обслуживать их из одного экземпляра django, поскольку мы работаем на виртуальном хостинге с ограниченной памятью, и, кажется, такая трата открывать экземпляр, который обслуживает только rss.

edit : Я пришел к выводу, что несколько экземпляров с отдельными файлами urls.py будут проще для меня ... но я нашел эту статью, описывающую, как это сделать, используя один экземпляр:

http://effbot.org/zone/django-multihost.htm

Решение: Джанго Tupperware

В итоге я написал фреймворк для запуска нескольких копий сайта на одном экземпляре django.

Основная идея заключается в том, чтобы на лету менять настройки SITE_ID для каждого запроса и загружать альтернативные настройки из базы данных. Он делает это на основе домена и по умолчанию использует SITE_ID = 1 (когда ничего не может найти)

Все настройки в файле settings.py действуют как значения по умолчанию, которые переопределяются настройками, хранящимися в базе данных для текущего сайта.

Работает довольно хорошо :) и работает в режиме производства http://rootbuzz.com

Ответы [ 2 ]

10 голосов
/ 17 июня 2009

При наличии Django у вас должен быть уникальный settings.py для каждого сайта ... потому что SITE_ID определен в settings.py и является ключом, для которого сайт обрабатывает этот запрос.

Другими словами, SITE_ID является глобальным для вашего экземпляра, и поэтому вам нужен экземпляр для каждого сайта.

Вы можете иметь общий urls.py, если хотите, потому что ничто не мешает вам использовать одни и те же ROOT_URLCONF во всех файлах settings.py вашего сайта ... или вы можете использовать один для каждого сайта. В этом случае вы захотите включить дополнительные URL-адреса, чтобы избежать повторения любых общих URL-адресов.

Существует как минимум два метода, которые вы можете использовать в одном экземпляре:

  1. Используйте apache + mod_wsgi и используйте директивы WSGIApplicationGroup и / или WSGIProcessGroup . Я никогда не нуждался в них раньше, поэтому не могу быть полностью уверен, что они будут работать так, как вы хотите, но независимо от того, что вы определенно можете использовать mod_wsgi в режиме демона, чтобы значительно улучшить вашу память.

  2. Вы можете поиграть с промежуточным программным обеспечением Django, чтобы запретить / разрешить URL-адреса на основе имени хоста запроса (см. HttpRequest.get_host () в документации Django). В этом отношении, даже если это будет незначительное снижение производительности, вы можете установить декоратор на все ваши представления, который проверяет входящий хост.

3 голосов
/ 27 марта 2011

К вашему сведению - я выпустил django-dynamicites, который может помочь с этой проблемой - https://bitbucket.org/uysrc/django-dynamicsites/src

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...