Конвейер 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
Почему обновление хеша не будет?
Ответы
Ответ 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