& # 8220; структура сайтов & # 8221; на одном экземпляре Django
Вопрос
Я хочу обслуживать специализированные 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 р>
Решение: Django tupperware
В итоге я написал каркас для запуска нескольких копий сайта в одном экземпляре django.
Основная идея заключается в том, чтобы на лету менять настройки SITE_ID
для каждого запроса и загружать альтернативные настройки из базы данных. Он делает это на основе домена и по умолчанию использует SITE_ID = 1
(когда ничего не может найти)
Все настройки в файле settings.py действуют как настройки по умолчанию, которые переопределяются настройками, хранящимися в базе данных для текущего сайта.
Он работает довольно хорошо :) и работает в производственном режиме на http://rootbuzz.com
Решение
При наличии Django у вас должен быть уникальный settings.py
для каждого сайта ... потому что SITE_ID определен в settings.py
и является ключом, для которого сайт обрабатывает этот запрос.
Другими словами, SITE_ID является глобальным для вашего экземпляра, и поэтому вам нужен экземпляр для каждого сайта.
Вы можете иметь общий urls.py
, если хотите, потому что ничто не мешает вам использовать один и тот же ROOT_URLCONF
на всем вашем сайте settings.py код> файлы ... или вы можете иметь один для каждого сайта. В этом случае вы захотите включить дополнительные URL-адреса, чтобы избежать повторения каких-либо общих URL-адресов.
Существует как минимум два метода, которые вы можете использовать в одном экземпляре:
<Ол>Используйте apache + mod_wsgi и используйте WSGIApplicationGroup и / или WSGIProcessGroup директивы. Я никогда не нуждался в них раньше, поэтому не могу быть полностью уверен, что они будут работать так, как вы хотите, но независимо от того, что вы определенно можете использовать mod_wsgi в режиме демона, чтобы значительно улучшить вашу память.
Вы можете поиграть с промежуточным программным обеспечением Django, чтобы запретить / разрешить URL-адреса на основе имени хоста запроса (см. HttpRequest.get_host () в документации Django). В этом отношении, даже если это будет незначительное снижение производительности, вы можете установить декоратор для всех ваших представлений, который проверяет входящий хост.
Другие советы
К вашему сведению - я выпустил django-dynamicites, который может помочь в решении этой проблемы - https: // bitbucket .org / uysrc / Джанго-dynamicsites / SRC р>