基本上,缓存清除文件上的哈希不会更新。
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
命令时,它正确创建了一个名为“main.min.d25bdd71759d.js
”的缓存清除文件
但是,当我运行该命令时,它无法在后处理阶段覆盖该缓存文件(并更新哈希)。
它不断更新“main.min.js
”,这样main.min.js
与我的文件系统同步。但是,未创建新的缓存文件。即使底层的main.min.j
s文件已更改,它也保持相同的旧哈希。
当我手动删除AWS上的缓存文件时,我从运行collectstatic
并将详细程度设置为3获得以下消息:
Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js
settings.DEBUG
将被设置为False
为什么哈希不会更新?
请尝试使用清单存储:
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也记录了这一点