2009-06-17 14 views
6

Ich möchte spezialisierte RSS-Feeds auf einer anderen Subdomain als der Rest der Website bereitstellen."Sites Framework" auf einer einzigen Django-Instanz

Kann ich das Site-Framework verwenden, um eine andere urls.py- und settings.py-Datei in einer einzigen Django-Instanz zu verwenden. Oder muss ich zwei Apache-Speicherorte einrichten und einfach die verschiedenen settings.py-Dateien im apache conf festlegen.

Der Grund, warum ich zwei urls.py-Dateien einrichten muss, ist doppelte Inhalte zu vermeiden. Ich möchte nicht, dass die Hauptseite bei rss.example.com verfügbar ist, und ich möchte nicht, dass die speziellen Feeds auf example.com zugänglich sind.

Sie aus einer einzigen Django-Instanz zu bedienen wäre ideal, weil wir Re auf Shared Hosting mit begrenztem Speicher, und es scheint wie eine Verschwendung, eine Instanz offen zu haben, die nur rss dient.

bearbeiten: Ich schloss daraus, dass mehrere Instanzen mit eigenen urls.py Dateien wären für mich am einfachsten ... aber ich habe diesen Artikel beschreibt, wie es zu tun, um eine einzelne Instanz mit:

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

Lösung: Django tupperware

Ich beendete das Schreiben eines Rahmens für die Ausführung mehrerer Kopien einer Site auf einer einzelnen Django-Instanz.

Die Grundidee besteht darin, die SITE_ID Einstellung für jede Anforderung im laufenden Betrieb zu ändern und alternative Einstellungen aus der Datenbank zu laden. Es tut dies, basierend auf Domäne und verwendet SITE_ID = 1 standardmäßig

Alle Einstellungen in der Datei settings.py wirken als Standardwerte, die überschrieben werden durch die Einstellungen in der Datenbank gespeichert für den aktuellen Standort (wenn es nichts finden).

Es funktioniert ziemlich gut :) und es ist in der Produktion bei http://rootbuzz.com

+0

Sind Sie noch Tupperware verwenden? Oder haben Sie bessere und frische Alternativen gefunden? –

+0

@MuratCorlu Tupperware ist immer noch in der Produktion für dieses Projekt :) – Jiaaro

+0

Ich habe versucht, es mit Django 1.7 zu verwenden, aber es hat nicht wie erwartet funktioniert. Auch Projekt scheint auf Bitbucket tot zu sein. Können Sie eine Beispielkonfiguration darüber teilen, wie Sie Tupperware verwendet haben? –

Antwort

10

Mit Lager Django läuft Ihnen eine einzigartige settings.py für jeden Standort haben muss ... weil die SITE_ID in settings.py definiert ist, und ist der Schlüssel für die Website verarbeitet diese Anfrage.

Mit anderen Worten, SITE_ID ist global für Ihre Instanz und Sie benötigen daher eine Instanz für jede Site.

Sie können eine gemeinsame urls.py haben, wenn Sie wollen, weil es gibt nichts, Sie verwenden den gleichen ROOT_URLCONF in all Ihrer Website settings.py Dateien zu verhindern ... oder Sie können für jeden Standort diffent eine haben. In diesem Fall sollten Sie Unter-URLs hinzufügen, um zu verhindern, dass Sie sich für gemeinsame URLs wiederholen.

Es gibt mindestens zwei Methoden, die Sie von einer einzigen Instanz versuchen können, dienen:

  1. Verwenden Apache + mod_wsgi und verwenden Sie die WSGIApplicationGroup und/oder WSGIProcessGroup Richtlinien. Ich habe diese zuvor noch nie benötigt, kann also nicht völlig sicher sein, dass diese funktionieren werden, wie Sie wollen, aber egal, Sie können mod_wsgi definitiv im Daemon-Modus verwenden, um Ihren Speicherbedarf erheblich zu verbessern.

  2. Sie können mit Django-Middleware spielen, um URLs basierend auf dem Hostnamen der Anfrage zu verweigern/zulassen (siehe HttpRequest.get_host() in den Django-Dokumenten). Auch wenn es sich um einen leichten Leistungseinbruch handelt, können Sie einen Dekorator auf alle Ihre Ansichten setzen, der den eingehenden Host überprüft.

+0

Danke! das ist genau das, was ich wissen musste – Jiaaro

+0

Da diese Subdomain nur spezialisierte RSS-Feeds unterstützt, setze ich maxRequestsPerChild auf 1, um RAM zu sparen. Irgendwelche Nachteile, über die ich etwas wissen sollte (außer der Geschwindigkeitsstrafe) – Jiaaro

+0

PS - Wie Sie sehen können, habe ich gerade beschlossen, eine neue Instanz zu machen ... Ich habe FAR zu viele Ansichten, um einen Dekorateur auf jeden einzelnen zu setzen – Jiaaro

Verwandte Themen