【问题标题】:Django ManifestStaticFilesStorage not loading the correct static filesDjango ManifestStaticFilesStorage 未加载正确的静态文件
【发布时间】:2017-10-06 17:12:14
【问题描述】:

我正在使用django-storagesManifestStaticFilesStorage 的组合来服务器静态文件和来自S3 的媒体。

class StaticStorage(ManifestFilesMixin, S3BotoStorage):
    location = settings.STATICFILES_LOCATION

当我运行 collectstatic 时,我可以在 S3 上看到我的 JS 文件的最新版本以及正确的时间戳。

我还可以看到 staticfiles.json 清单中引用了该文件。

但是在浏览器中查看该站点时,我仍然看到旧的 JS 被拉下,而不是 manifest 中的那个

可能出了什么问题?

【问题讨论】:

  • 对我来说同样的问题。我正在检查 WhiteNoise
  • 你有没有想过这个问题?
  • 重启能解决吗?我认为 staticfiles.json 在启动时加载一次。

标签: django amazon-s3 django-storage


【解决方案1】:

您可以阅读this post 了解更多信息。简而言之:

默认情况下,staticfiles.json 将驻留在 STATIC_ROOT 中,即 收集所有静态文件的目录。我们托管所有我们的 S3 存储桶上的静态资产,默认为 staticfiles.json 最终会被同步到 S3。

因此,如果您的 staticfiles.json 被缓存,您的静态文件将是旧文件。

有两种方法可以解决这个问题:

  • 版本化 staticfiles.json 就像您已经完成了静态文件一样
  • staticfiles.json 保留在本地而不是 S3 中

【讨论】:

  • 另一种选择是使用CachedFilesMixin,它将数据存储在缓存中而不是文件中。 ...不过,它似乎没有对哈希进行预处理,但在每个文件请求时都会这样做,所以并不理想。
【解决方案2】:

staticfiles.json 似乎在服务器启动时加载一次(从 S3 实例)。如果您在服务器运行时运行collectstatic,则它无法知道对 S3 进行了更改。运行collectstatic后,如果进行了更改,则需要重新启动服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2019-08-31
    • 2014-11-12
    • 2021-04-03
    • 2012-01-21
    • 2016-11-06
    • 1970-01-01
    相关资源
    最近更新 更多