Django管道Cache Busting不是更新缓存文件/哈希

时间:2013-07-29 17:41:28

标签: django caching django-staticfiles django-pipeline

基本上,缓存清除文件上的哈希不会更新。

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文件已更改,它也会保留相同的旧哈希值。

当我在AWS上手动删除缓存文件时,我从运行collectstatic并将详细程度设置为3时收到以下消息:

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

settings.DEBUG设置为False

为什么要赢取哈希更新?

1 个答案:

答案 0 :(得分:1)

请尝试使用清单存储:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
    pass

根据此处的django文档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

也记录了这一点