Последняя версия django-storages
(1.1.3) обрабатывает обнаружение модификации файла с помощью S3 Boto.
pip install django-storages
и теперь все хорошо :) Люблю открытый код!
Обновление: установите параметр AWS_PRELOAD_METADATA
на True
в вашем файле настроек, чтобы иметь очень быструю синхронизацию при использовании класса S3Boto.Если используется его S3, используйте его класс PreloadedS3.
Обновление 2: запуск команды все еще очень медленный.
Обновление 3: Я разветвил репозиторий django-storages , чтобы исправить проблему, и добавил запрос на удаление.
Проблема заключается в методе modified_time
, где вызывается запасное значение, даже если оно не используется.Я переместил запасной вариант в блок if
, который будет выполняться, только если get
возвращает None
entry = self.entries.get(name, self.bucket.get_key(self._encode_name(name)))
Должно быть
entry = self.entries.get(name)
if entry is None:
entry = self.bucket.get_key(self._encode_name(name))
Теперь разница в производительности составляет от <.5s для 1000 запросов из 100s </p>
Обновление 4:
Для синхронизации файлов 10k +, я считаю, что boto должен сделать несколько запросов, так как S3 разбивает на страницы результаты, вызывая синхронизацию 5-10 секунд,Это будет только хуже, когда мы получим больше файлов.
Я думаю, что решение состоит в том, чтобы иметь пользовательскую команду управления или django-storages
обновить, где файл хранится на S3, который имеет метаданные всех других файлов, который обновляется каждый раз, когда файл обновляется черезкоманда collectstatic
.
Он не будет обнаруживать файлы, загруженные другими способами, но не будет иметь значения, если единственной точкой входа является команда управления.