Pregunta

Deseo publicar feeds RSS especializados en un subdominio diferente del resto del sitio.

¿Puedo usar el framework de sitios para usar un archivo urls.py y settings.py diferente dentro de una sola instancia de django . o necesito configurar dos ubicaciones de apache y solo configurar los diferentes archivos settings.py en la configuración de apache.

La razón por la que necesito configurar dos archivos urls.py es para evitar contenido duplicado. No quiero que el sitio principal esté disponible en rss.example.com y no quiero que los feeds especializados estén accesibles en example.com

Servirlos desde una sola instancia de django sería ideal porque estamos en un alojamiento compartido con memoria limitada, y parece una pérdida tener una instancia abierta que solo sirva para rss.

edit : Llegué a la conclusión de que varias instancias con archivos urls.py separados serían más fáciles para mí ... pero encontré este artículo que describe cómo hacerlo usando una sola instancia:

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

Solución: Django tupperware

Terminé escribiendo un marco para ejecutar múltiples copias de un sitio en una sola instancia de django.

La idea básica es cambiar la configuración de SITE_ID sobre la marcha para cada solicitud y cargar configuraciones alternativas desde la base de datos. Lo hace en función del dominio y utiliza SITE_ID = 1 de forma predeterminada (cuando no puede encontrar nada)

Todas las configuraciones en el archivo settings.py actúan como valores predeterminados que se anulan por las configuraciones almacenadas en la base de datos para el sitio actual.

Funciona bastante bien :) y se está ejecutando en producción en http://rootbuzz.com

¿Fue útil?

Solución

Con Django de serie debe tener un settings.py único para cada sitio ... porque el SITE_ID se define en settings.py y es la clave para ese sitio está manejando esta solicitud.

En otras palabras, SITE_ID es global para su instancia y, por lo tanto, necesita una instancia para cada sitio.

Puede tener un urls.py común si lo desea porque no hay nada que le impida utilizar el mismo ROOT_URLCONF en todos los settings.py archivos ... o puede tener uno diferente para cada sitio. En este caso, deseará incluir sub URL para evitar que se repita para cualquier URL común.

Hay al menos dos métodos que puede intentar servir desde una sola instancia:

  1. Use apache + mod_wsgi y use el WSGIApplicationGroup y / o directivas WSGIProcessGroup . Nunca los he necesitado antes, así que no puedo estar completamente seguro de que funcionarán de la manera deseada, pero independientemente de eso, definitivamente puedes usar mod_wsgi en modo demonio para mejorar enormemente tu huella de memoria.

  2. Puede jugar con el middleware Django para denegar / permitir URL basadas en el nombre de host de la solicitud (consulte HttpRequest.get_host () en los documentos de Django). Para el caso, aunque sería un pequeño éxito en el rendimiento, puede poner un decorador en todas sus vistas que verifique el host entrante.

Otros consejos

FYI - Lancé django-dynamicsites que puede ser útil con este problema - https: // bitbucket .org / uysrc / django-dynamicsites / src

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top