& # 8220; структура сайтов & # 8221; на одном экземпляре Django

StackOverflow https://stackoverflow.com/questions/1007017

Вопрос

Я хочу обслуживать специализированные 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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top