2010-11-12 3 views
2

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

Что бы я хотел, это иметь возможность регистрировать обработчик «post file changed», который запускает rsync всякий раз, когда загружается новый файл. Хотя я не могу найти ничего подобного! В Django есть обработчики загрузки файлов, но они, похоже, относятся только к фактическому потоку загрузки, а не к файлу, который впоследствии сохраняется в файловой системе.

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

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

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

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

ответ

1

Если вы хотите, чтобы решить эту проблему с серверной стороны (например, аналогичный раствор для Rsync.) И вы используете Linux, вы можете проверить lsyncd:

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

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

+0

Большое спасибо. Способ думать за пределами коробки;) Я посмотрю на эту следующую неделю и дам вам знать, как это происходит. На главной странице ... 'Lsyncd vs. cron: если вы найдете решение, использующее cron для вызова rsync по всему дереву каталогов периодически после каждых« X »часов/минут/секунд, более удовлетворяющих, чем lsyncd, дуется «». Нам это не нравится! – adamnfish