Ответ 1
Последняя версия django-storages
(1.1.3) обрабатывает обнаружение изменений файла через S3 Boto.
pip install django-storages
, и теперь у вас все хорошо:) Должен любить открытый исходный код!
Обновление: установите для параметра AWS_PRELOAD_METADATA
значение True
в файле настроек, чтобы иметь очень быструю синхронизацию при использовании класса S3Boto. Если вы используете его S3, используйте его класс PreloadedS3.
Обновление 2: все еще очень медленно запускать команду.
Обновление 3: Я искал репозиторий django-хранилищ, чтобы исправить проблему и добавил запрос на перенос.
Проблема заключается в методе 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 запросов от 100 секунд
Обновление 4:
Для синхронизации файлов 10k +, я считаю, что boto должен делать несколько запросов, поскольку результаты S3 paginates вызывают 5-10 секундное время синхронизации. Это будет только ухудшаться, поскольку мы получаем больше файлов.
Я думаю, что решение состоит в том, чтобы иметь настраиваемую команду управления или django-storages
обновление, где файл хранится на S3, который содержит метаданные всех других файлов, который обновляется всякий раз, когда файл обновляется через collectstatic
.
Он не будет обнаруживать файлы, загруженные с помощью других средств, но не имеет значения, единственной точкой входа является команда управления.