2009-06-17 9 views
6

Quiero publicar feeds RSS especializados en un subdominio diferente del resto del sitio."frameworks de sitios" en una sola instancia de django

¿Puedo utilizar el framework de sitios para usar un archivo urls.py y settings.py diferente dentro de una única instancia de django. o necesito configurar dos ubicaciones de apache y simplemente configurar los diferentes archivos settings.py en apache conf.

La razón por la que necesito configurar dos archivos urls.py es para evitar el 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 única instancia django sería ideal porque ' en el alojamiento compartido con memoria limitada, y parece una pérdida tener una instancia abierta que solo sirve rss.

edición: I concluyó que varias instancias con archivos separados urls.py sería más fácil para mí ... pero me encontré con este artículo que describe cómo hacerlo utilizando una única 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 django.

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

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

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

+0

¿Está todavía utilizan Tupperware? ¿O encontró alguna alternativa mejor y más fresca? –

+0

@MuratCorlu Tupperware todavía está en uso de producción en ese proyecto :) – Jiaaro

+0

Intenté usarlo con Django 1.7 pero no funcionó como se esperaba. También el proyecto parece estar muerto en Bitbucket. ¿Puedes compartir una configuración de ejemplo sobre cómo usaste tupperware? –

Respuesta

10

Con acciones Django debe tener un único settings.py para cada sitio ... porque el SITE_ID se define en settings.py y es la clave para el cual 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.

Usted puede tener un común urls.py si lo desea porque no hay nada que le impida el uso de la misma en todos los ROOT_URLCONF su sitio archivos settings.py ... o puede tener uno diffent para cada sitio. En este caso, debería incluir las URL secundarias para evitar que se repita por cualquier URL común.

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

  1. Uso Apache + mod_wsgi y utilizar el WSGIApplicationGroup y/o WSGIProcessGroup directivas. Nunca los he necesitado antes, así que no puedo estar completamente seguro de que funcionen de la manera que desees, pero a pesar de que definitivamente puedes usar mod_wsgi en el modo daemon para mejorar mucho tu memoria.

  2. Puede jugar con el middleware de Django para denegar/permitir URL en función del nombre de host de la solicitud (consulte HttpRequest.get_host() en los documentos de Django). Para el caso, aunque sería un golpe de rendimiento leve, puede colocar un decorador en todas sus vistas que verifique el host entrante.

+0

gracias! esto es exactamente lo que necesitaba saber – Jiaaro

+0

Dado que este subdominio solo sirve fuentes RSS especializadas, voy a establecer maxRequestsPerChild en 1 para conservar la RAM. Cualquier desventajas que debería saber (aparte de la pérdida de velocidad) – Jiaaro

+0

PS - Como se puede ver que decidí hacer una nueva instancia ... Tengo demasiadas vistas a estar poniendo un decorador en todos y cada uno – Jiaaro

Cuestiones relacionadas