Действие Django после загрузки файла - PullRequest
2 голосов
/ 12 ноября 2010

У нас имеется обширная база кодов, и мы добавили в уравнение серверы с балансировкой нагрузки с одним главным сервером.Существуют различные приложения, которые содержат модели с загруженными файлами и изображениями, которые работают нормально ... Однако это поднимает очевидную проблему задержки rsync.Rsync находится в crontab и настроен на запуск каждую минуту, но это все еще означает, что между созданным контентом и его фактическим существованием на веб-серверах существует потенциальная задержка в 59 секунд.

Я хотел бы иметь возможность зарегистрироватьсякакой-то обработчик 'post file change', запускающий rsync при каждой загрузке нового файла.Я не могу найти ничего подобного, хотя!В Django есть обработчики выгрузки файлов, но, похоже, они имеют дело только с реальным потоком выгрузки, а не с файлом, который после этого сохраняется в файловой системе.

Лучший подход, который я вижу, - это создать простые расширения для FileField,FieldFile, ImageField и ImageFieldFile как часть моего проекта и подключаются к методам сохранения и удаления в FileField.По сути, для создания пользовательских полей File и Image с этим добавленным поведением.Это не очень сложно сделать, но это не кажется мне самым элегантным решением.Мне нужно будет рассказать Сауту о моих новых полях, обновить каждую модель, на которую влияют, а затем создать орды миграций на юг (которые, я уверен, будут конфликтовать с некоторым кодом, который мы ожидаем).

I 'Я также изучаю возможность создания собственного класса Storage для проекта, но я нервничаю из-за того, что это имеет далеко идущие последствия для других частей кода.

Не могу поверить, что никто не сталкивался с этой проблемойраньше, есть ли канонический подход?

Большое спасибо!

1 Ответ

1 голос
/ 12 ноября 2010

Если вы хотите решить эту проблему со стороны сервера (например, аналогично решению rsync) и используете Linux, вы можете проверить lsyncd:

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

lsyncd использует inotify в ядре Linux для просмотра каталогов и запуска rsync, как только файлы будут изменены. Довольно просто заскочить.

...