【问题标题】:Django pipeline Cache Busting is not Updating Cached File/HashDjango 管道缓存清除未更新缓存文件/哈希
【发布时间】:2013-07-29 15:10:36
【问题描述】:

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

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

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

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

settings.DEBUG 设置为False

为什么哈希不更新?

【问题讨论】:

  • 请显示相关设置:PIPELINE_ENABLED、STATICFILES_STORAGE、STATICFILES_FINDERS
  • 能确定main.min.js和上一个不一样吗?如果文件本身没有任何更改,则哈希不会更改。看起来你只在 main.js 中包含了你不应该编辑的库,所以这就是我问的原因。
  • 您提到了您的用户 AWS 存储(我想是 boto)。如果您将静态管道传输到本地文件夹(而不是 AWS),您能否检查问题是否仍然重现。我想这很可能是 boto 问题。
  • 您的时区是否设置为 UTC 以西?这可能会导致collectstaticS3BotoStorage 出现问题。

标签: django caching django-staticfiles django-pipeline


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2015-03-10
    • 2018-11-29
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多