2009-06-17 3 views
6

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

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

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

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

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

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

Django tupperware

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

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

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

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

+0

Вы все еще используете Tupperware? Или вы нашли лучшие и свежие альтернативы? –

+0

@ MuratCorlu Tupperware все еще используется в этом проекте :) – Jiaaro

+0

Я попытался использовать его с Django 1.7, но он не работал должным образом. Также проект кажется мертвым на Битбакет. Можете ли вы поделиться примерной конфигурацией о том, как вы использовали tupperware? –

ответ

10

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

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

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

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

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

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

+0

спасибо! это именно то, что мне нужно знать – Jiaaro

+0

Поскольку этот поддомен обслуживает только специализированные RSS-каналы, я собираюсь установить maxRequestsPerChild на 1 для сохранения ОЗУ. Любые недостатки, о которых я должен знать (кроме штрафа за скорость) – Jiaaro

+0

PS - Как вы можете видеть, я просто решил создать новый экземпляр ... У меня FAR слишком много просмотров, чтобы разместить декоратор на каждом одиночном – Jiaaro

3

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

+0

спасибо за обновление ... Я также написал что-то вроде этого: https://bitbucket.org/jiaaro/django-tupperware/src/ – Jiaaro

Смежные вопросы