Question

Je souhaite diffuser des flux RSS spécialisés sur un sous-domaine différent du reste du site.

Puis-je utiliser la structure de sites pour utiliser un fichier urls.py et settings.py différent au sein d'une même instance Django . ou dois-je configurer deux emplacements Apache et simplement définir les différents fichiers settings.py dans la configuration Apache.

La raison pour laquelle j'ai besoin de configurer deux fichiers urls.py est d'éviter le contenu en double. Je ne veux pas que le site principal soit disponible à l'adresse rss.example.com et je ne veux pas que les flux spécialisés soient accessibles sur example.com

Les desservir à partir d'une seule instance Django serait idéal, car nous utilisons un hébergement partagé avec une mémoire limitée, et il semblerait qu'un tel gaspillage soit d'avoir une instance ouverte ne servant que des flux RSS.

modifier : j'ai conclu que plusieurs instances contenant des fichiers distincts urls.py seraient plus faciles pour moi ... mais j'ai trouvé cet article décrivant comment procéder à l'aide d'une seule instance:

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

Django tupperware

J'ai fini par écrire un framework pour exécuter plusieurs copies d'un site sur une seule instance de Django.

L'idée de base est de modifier le paramètre SITE_ID à la volée pour chaque demande et de charger d'autres paramètres à partir de la base de données. Il le fait en fonction du domaine et utilise SITE_ID = 1 par défaut (lorsqu'il ne trouve rien)

Tous les paramètres du fichier settings.py agissent par défaut, ils sont remplacés par les paramètres stockés dans la base de données pour le site actuel.

Cela fonctionne plutôt bien :) et sa production est en cours de production à l'adresse http://rootbuzz.com

.
Était-ce utile?

La solution

Avec Django en stock, vous devez disposer d'un settings.py unique pour chaque site ... car le SITE_ID est défini dans settings.py et constitue la clé de ce site. gère cette demande.

En d'autres termes, SITE_ID est global pour votre instance. Par conséquent, vous avez besoin d'une instance pour chaque site.

Vous pouvez avoir un urls.py commun, car rien ne vous empêche d'utiliser le même ROOT_URLCONF dans l'ensemble de votre site settings.py fichiers ... ou vous pouvez en avoir un différent pour chaque site. Dans ce cas, vous voudrez peut-être inclure des sous-URL pour éviter de vous répéter pour les URL communes.

Il existe au moins deux méthodes que vous pouvez essayer de servir à partir d'une seule instance:

  1. Utilisez apache + mod_wsgi et utilisez le WSGIApplicationGroup et / ou directives WSGIProcessGroup . Je n’en ai jamais eu besoin auparavant, je ne peux donc pas être tout à fait sûr que cela fonctionnera comme vous le souhaitez, mais vous pouvez quand même utiliser mod_wsgi en mode démon pour améliorer considérablement votre empreinte mémoire.

  2. Vous pouvez jouer avec le middleware Django pour refuser / autoriser les URL en fonction du nom d'hôte de la demande (voir HttpRequest.get_host () dans les documents Django). Dans ce cas, même si cela aurait un léger impact sur les performances, vous pouvez placer un décorateur sur toutes vos vues vérifiant l'hôte entrant.

Autres conseils

FYI - J'ai publié Django-dynamicites qui peuvent être utiles avec ce problème - https: // bitbucket .org / uysrc / django-dynamicites / src

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top