2009-06-17 15 views
6

Desidero pubblicare feed RSS specializzati su un sottodominio diverso dal resto del sito."framework di siti" su una singola istanza di django

Posso utilizzare il framework dei siti per utilizzare un diverso file urls.py e settings.py all'interno di una singola istanza di django. o ho bisogno di impostare due posizioni di apache e basta impostare i diversi file settings.py nel conf apache.

Il motivo per cui ho bisogno di installare due file urls.py è di evitare il contenuto duplicato. Non voglio che il sito principale sia disponibile su rss.example.com e non voglio che i feed specializzati siano accessibili su example.com

Il loro servizio da una singola istanza di django sarebbe l'ideale perché noi " re su hosting condiviso con memoria limitata, e sembra un tale spreco avere un'istanza aperta che serve solo su rss.

Edit: ho concluso che più istanze con i file urls.py separati sarebbe più facile per me ... ma ho trovato questo articolo che descrive come farlo utilizzando una singola istanza:

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

Soluzione: Django tupperware

Ho finito per scrivere un framework per l'esecuzione di più copie di un sito su una singola istanza di django.

L'idea di base è quella di modificare l'impostazione SITE_ID al volo per ogni richiesta e caricare impostazioni alternative dal database. Lo fa in base al dominio e utilizza SITE_ID = 1 per impostazione predefinita (quando non riesce a trovare nulla)

Tutte le impostazioni nel file settings.py fungono da impostazioni predefinite che vengono sovrascritte dalle impostazioni memorizzate nel database per il sito corrente.

funziona piuttosto bene :) ed è in esecuzione in produzione presso http://rootbuzz.com

+0

State usano ancora tupperware? O hai trovato alternative migliori e fresche? –

+0

@MuratCorlu Tupperware è ancora in produzione per quel progetto :) – Jiaaro

+0

Ho provato ad usarlo con Django 1.7 ma non ha funzionato come previsto. Anche il progetto sembra morto su Bitbucket. Puoi condividere una configurazione di esempio su come hai usato tupperware? –

risposta

10

Con magazzino Django è necessario disporre di un unico settings.py per ogni sito ... perché il SITE_ID è definito in settings.py ed è la chiave per la quale sito sta gestendo questa richiesta.

In altre parole, SITE_ID è globale per l'istanza e pertanto è necessaria un'istanza per ciascun sito.

si può avere un comune urls.py se lo si desidera, perché non c'è nulla che impedisce di utilizzare lo stesso ROOT_URLCONF in tutte le vostre sito settings.py file ... o si può avere uno diffent per ogni sito. In questo caso, vorresti includere URL secondari per evitare di ripetere te stesso per gli URL più comuni.

ci sono almeno due metodi si può provare a servire da una singola istanza:

  1. utilizzare Apache + mod_wsgi e utilizzare il WSGIApplicationGroup e/o WSGIProcessGroup direttive. Non ho mai avuto bisogno di questi prima quindi non posso essere completamente sicuro che funzioneranno come vuoi, ma a prescindere puoi usare mod_wsgi in modalità demone per migliorare notevolmente il tuo impatto sulla memoria.

  2. È possibile giocare con il middleware Django per negare/consentire gli URL in base al nome host della richiesta (vedere HttpRequest.get_host() nei documenti Django). Del resto, anche se sarebbe un leggero impatto sulle prestazioni, puoi mettere un decoratore su tutte le visualizzazioni che controlla l'host in arrivo.

+0

grazie! questo è esattamente ciò che dovevo sapere – Jiaaro

+0

Poiché questo sottodominio serve solo feed RSS specializzati, imposterò maxRequestsPerChild su 1 per risparmiare RAM. Qualsiasi aspetto negativo di cui dovrei essere a conoscenza (a parte la penalità di velocità) – Jiaaro

+0

PS - Come puoi vedere ho appena deciso di creare una nuova istanza ... Ho troppe visioni su cui mettere un decoratore su ogni singolo – Jiaaro

Problemi correlati