2010-11-12 29 views
2

Nous avons une base de code étendue existante et nous avons ajouté des serveurs à équilibrage de charge avec un seul serveur maître à l'équation maintenant. Il existe diverses applications qui contiennent des modèles avec des fichiers téléchargés et des images qui fonctionnent bien ... Cependant, cela soulève le problème évident du délai rsync. Rsync est dans le crontab et configuré pour s'exécuter toutes les minutes, mais cela signifie qu'il y a une attente potentielle de 59 secondes entre le contenu créé et celui qui existe réellement sur les serveurs Web. Ce que je voudrais, c'est de pouvoir enregistrer un type de gestionnaire 'post file changed' qui déclenche rsync chaque fois qu'un nouveau fichier est téléchargé. Je ne trouve rien de ce genre! Django dispose de gestionnaires de téléchargement de fichiers, mais ceux-ci semblent ne traiter que du flux de téléchargement réel, pas du fichier tel qu'il est enregistré dans le système de fichiers par la suite.Action de Django après le chargement du fichier

La meilleure approche que je peux voir est de créer des extensions simples à FileField, FieldFile, ImageField et ImageFieldFile dans le cadre de mon projet et de se brancher sur les méthodes save et delete dans le FileField. Essentiellement, pour créer des champs de fichiers et d'images personnalisés avec ce comportement ajouté. Ce n'est pas très compliqué à faire mais cela ne me semble pas la solution la plus élégante. Je vais devoir apprendre à South sur mes nouveaux champs, mettre à jour tous les modèles affectés et ensuite créer des hordes de migrations vers le sud (ce qui, j'en suis sûr, se heurtera au code que nous avons en attente).

Je suis également à la recherche de créer une classe de stockage personnalisée pour le projet, mais je suis nerveux à ce sujet ayant des effets de grande portée sur d'autres morceaux de code.

Je ne peux pas croire que personne n'a déjà rencontré ce problème, y a-t-il une approche canonique?

Merci beaucoup!

Répondre

1

Si vous voulez résoudre ce problème du côté serveur (par exemple de solution similaire à rsync.) Et que vous utilisez Linux, vous pouvez consulter lsyncd:

http://code.google.com/p/lsyncd/

utilisations lsyncd inotify dans le noyau Linux pour regarder les répertoires et invoquer un rsync dès que les fichiers sont modifiés. Assez simple à déposer.

+0

Merci beaucoup. Façon de penser en dehors de la boîte;) Je vais regarder dans la semaine prochaine et vous faire savoir comment ça se passe. De la page principale ... 'Lsyncd vs. cron: Si vous trouvez une solution utilisant cron pour appeler rsync sur l'ensemble de l'arborescence périodiquement après chaque 'X' heures/minutes/secondes plus satisfaisant que lsyncd, allez-y '' bouder ». Nous ne l'aimons pas! – adamnfish