Domanda

Voglio fornire feed RSS specializzati su un sottodominio diverso dal resto del sito.

Posso usare il framework dei siti per usare un diverso file urls.py e settings.py all'interno di una singola istanza di django . o devo impostare due posizioni di apache e semplicemente impostare i diversi file settings.py nella conf apache.

Il motivo per cui devo impostare due file urls.py è evitare contenuti duplicati. Non voglio che il sito principale sia disponibile su rss.example.com e non voglio che i feed specializzati siano accessibili su example.com

Servirli da una singola istanza di django sarebbe l'ideale perché siamo su hosting condiviso con memoria limitata, e sembra un tale spreco avere un'istanza aperta che serve solo rss.

modifica : ho concluso che più istanze con file urls.py separati sarebbero state le più facili per me ... ma ho trovato questo articolo che descrive come farlo usando 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 è cambiare al volo l'impostazione SITE_ID 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 abbastanza bene :) ed è in produzione in http://rootbuzz.com

È stato utile?

Soluzione

Con lo stock Django è necessario disporre di un settings.py univoco per ciascun sito ... perché SITE_ID è definito in settings.py ed è la chiave per quale sito sta gestendo questa richiesta.

In altre parole, SITE_ID è globale per la tua istanza e quindi hai bisogno di un'istanza per ogni sito.

Se lo desideri, puoi avere un urls.py comune perché non c'è nulla che ti impedisca di usare lo stesso ROOT_URLCONF in tutto il tuo settings.py file ... oppure puoi averne uno diverso per ogni sito. In questo caso, dovresti includere gli URL secondari per evitare di ripetere te stesso per qualsiasi URL comune.

Esistono almeno due metodi che puoi provare a pubblicare da una singola istanza:

  1. Usa apache + mod_wsgi e usa WSGIApplicationGroup e / o WSGIProcessGroup direttive. Non ne ho mai avuto bisogno prima, quindi non posso essere del tutto sicuro che funzioneranno nel modo desiderato, ma a prescindere puoi sicuramente usare mod_wsgi in modalità demone per migliorare notevolmente il tuo footprint di memoria.

  2. Puoi giocare con il middleware Django per negare / consentire gli URL in base al nome host della richiesta (vedi HttpRequest.get_host () nei documenti Django). In ogni caso, anche se sarebbe un leggero successo in termini di prestazioni, puoi mettere un decoratore in tutte le tue visualizzazioni che controlla l'host in arrivo.

Altri suggerimenti

FYI - Ho rilasciato django-dynamicsites che possono essere utili con questo problema - https: // bitbucket .org / uysrc / django-dynamicsites / src

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top