«рамки сайтов» на одном экземпляре django

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

Могу ли я использовать структуру сайтов для использования разных файлов SITE_ID и SITE_ID = 1 в одном экземпляре 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

Решение: Django tupperware

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

Основная идея - изменить settings.pyнастройку «на лету» для каждого запроса и загрузить альтернативные настройки из базы данных. Он делает это на основе домена и использует urls.pyпо умолчанию (когда он ничего не может найти)

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

Он работает очень хорошо :) и он работает в производстве на http://rootbuzz.com

django,apache,rss,settings,sites,

6

Ответов: 2


10 принят

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

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

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

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

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

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


3

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

Джанго, Apache, RSS, настройки, сайты,
Похожие вопросы
Яндекс.Метрика