Frage

Ich mag spezialisierte RSS dienen Feeds auf einer anderen Sub-Domain vom Rest der Website.

Kann ich den Websites Rahmen eine andere urls.py und settings.py Datei verwenden innerhalb einer einzigen django Instanz . oder muss ich einzurichten zwei Apache-Standorten und setzen nur die verschiedenen settings.py Dateien im Apache conf.

Der Grund, warum ich brauche zwei urls.py Dateien einzurichten, ist doppelte Inhalte zu vermeiden. Ich will nicht die Haupt-Website an rss.example.com verfügbar sein und ich will nicht die spezialisierten Feeds zugänglich auf example.com

sein

sie von einer einzigen Instanz django Serving wäre ideal, weil wir auf gemeinsamen mit begrenztem Speicher-Hosting, und es scheint wie eine solche Abfälle eine Instanz geöffnet haben, dass nur rss serviert.

Bearbeiten : Ich festgestellt, dass mehrere Instanzen mit eigenen urls.py Dateien für mich am einfachsten wären ... aber ich diesen Artikel gefunden zu beschreiben, wie es zu tun, um eine einzelne Instanz mit:

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

Lösung: Django Tupper

Ich landete einen Rahmen für das Ausführen mehrerer Kopien einer Website auf einer einzigen django Instanz Schreiben auf.

Die Grundidee ist für jede Anforderung der SITE_ID Einstellung im laufenden Betrieb zu ändern und andere Einstellungen aus der Datenbank laden. Es tut dies, basierend auf Domäne und verwendet SITE_ID = 1 standardmäßig (wenn es nichts finden)

Alle Einstellungen in der Datei settings.py wirken als Standardwerte, die von den Einstellungen in der Datenbank für die aktuelle Site gespeichert werden außer Kraft gesetzt.

Es funktioniert ziemlich gut :) und es ist in der Produktion läuft unter http://rootbuzz.com

War es hilfreich?

Lösung

Mit Lager Django Sie müssen eine eindeutige settings.py für jeden Standort haben ... weil die SITE_ID in settings.py definiert ist, und ist der Schlüssel für die Website Anfrage verarbeitet.

Mit anderen Worten, SITE_ID ist global zu Ihrer Instanz und deshalb müssen Sie eine Instanz für jede Website.

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 würden Sie Sub-URLs enthalten, um zu verhindern, sich für alle gängigen URLs zu wiederholen.

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

  1. Verwenden Sie Apache + mod_wsgi und verwenden Sie die WSGIApplicationGroup und / oder WSGIProcessGroup Richtlinien. Ich habe nie gebraucht, diese vor so nicht ganz sicher sein können, diese werden die Art und Weise arbeiten Sie wollen, aber unabhängig können Sie auf jeden Fall mod_wsgi im Daemon-Modus verwenden, um stark Ihren Speicherbedarf zu verbessern.

  2. Sie mit Django Middleware spielen können URLs zu verweigern / zulassen basierend auf der Anforderung Hostnamen (siehe HttpRequest.get_host () in der Django docs). Was das betrifft, auch wenn es eine leichte Leistungseinbußen sein würde, können Sie einen Dekorateur auf alle Ihre Ansichten setzen, die den eingehenden Host überprüft.

Andere Tipps

FYI - ich entlassen django-dynamicsites, die sich mit diesem Thema hilfreich sein können - https: // bitbucket .org / uysrc / django-dynamicsites / src

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top