Подтвердить что ты не робот

Конвейер Jango Cache Busting не обновляет кешированный файл/хэш

В принципе, хэш в файле busting cache не обновляется.

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage):
     pass

PIPELINE_JS = {
 'main.js': {
    'output_filename': 'js/main.min.js',
    'source_filenames': [
        'js/external/underscore.js',
        'js/external/backbone-1.0.0.js',
        'js/external/bootstrap-2.2.0.min.js',
    ]
  }
}

Когда я впервые запустил команду collectstatic, она правильно создала файл busting с именем "main.min.d25bdd71759d.js

Теперь, когда я запускаю команду, она не перезаписывает этот файл в кэше (и обновляет хеш) во время фазы после обработки.

Он обновляет "main.min.js", так что main.min.js является текущим с моей файловой системой. Однако новый кешированный файл не создается. Он сохраняет тот же старый хэш, даже если основной файл main.min.j изменился.

Когда я вручную удаляю кешированный файл на AWS, я получаю следующее сообщение от запуска collectstatic с многословием, установленным в 3:

Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js

settings.DEBUG установлен на False

Почему обновление хеша не будет?

4b9b3361

Ответ 1

Попробуйте вместо этого использовать хранилище манифеста:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    pass

В соответствии с django docs здесь https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorage не рекомендуется использовать CachedStaticFilesStorage.

Имена ваших файлов для ваших статических файлов, вероятно, будут кэшироваться. Поэтому используйте манифест.

CachedStaticFilesStorage не рекомендуется - почти во всех случаях ManifestStaticFilesStorage - лучший выбор. При использовании CachedStaticFilesStorage существует несколько штрафных санкций, поскольку для прошивки кеша требуются файлы хеширования во время выполнения. Для удаленного хранения файлов требуется несколько обращений к хэшу файла при пропуске кеша, так как для доступа к файлам требуется несколько файлов, чтобы гарантировать корректность хеша файла в случае вложенных путей к файлу.

Примечание. Это также описано в django-pipelines http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storages