【问题标题】:Django Whitenoise cache busting controlDjango Whitenoise 缓存破坏控制
【发布时间】:2016-06-27 12:05:08
【问题描述】:

我已经运行了manage.py collectstatic,Whitenoise 已经对所有静态文件进行了后处理。如果我想更改/更新某些文件,例如我的 .css 样式表,我不太确定现在应该怎么做?每次更改文件时我应该运行manage.py collectstatic 吗?我问这个是因为我的开发服务器需要大约 45 分钟才能完成该任务,我不确定这是否正常,因为我只有 550 个静态文件,总共 250Mb。

其次,由于 Whitenoise 不支持提供媒体文件,因此我使用 Amazon CloudFront。如何使用用户上传的媒体文件控制缓存破坏?这对我来说非常重要。

【问题讨论】:

  • 你“只有”有 250Mb 的静态文件?!
  • 是的,是不是太过分了?我的静态文件夹中有大部分 .PDF 文件(一些小册子),我应该将它们移动到媒体文件夹还是其他地方?

标签: django caching


【解决方案1】:

是的,每次文件更改时,您都需要运行 collectstatic

拥有 250MB 的静态文件是很不寻常的。此外,因为 Django 的缓存清除会创建一个具有唯一名称的每个文件的副本,所以您最终会得到每个文件的两个副本,因此已经有 500MB。除此之外,WhiteNoise 将为每个文件创建 gzip 压缩版本,这样您就可以使用 1GB 的文件。

加快此过程的一种快速方法是告诉 WhiteNoise 不要压缩您的 PDF 文件,您可以通过将 .pdf 添加到 WHITENOISE_SKIP_COMPRESS_EXTENSIONS 设置来做到这一点。

听起来你的小册子最好存储为用户媒体,而不是静态资产。

要控制缓存,您应该让您的代码在上传时为每个文件生成一个唯一的名称(添加一个随机字符串作为文件名的前缀应该可以解决问题)。然后,您可以根据需要在这些文件上设置缓存标头。

【讨论】:

  • 谢谢你,我已经按照你的建议做了,并将我的 PDF 文件移动到我的媒体存储中(在 S3 上,没有 Expires 标头),我现在有 15MB 的静态文件,现在一切正常。但我仍然无法管理缓存控制。让我们以我的 app.css 文件为例。我已更改文件并运行 collectstatic -c 但在网络浏览器中我仍然得到旧的 app.css 文件(使用 ctrl+f5 - 忽略缓存内容)。如果我在我的 html 中将它的名称更改为 app.1.css 文件,我会收到 404 错误,django 无法找到它。我仍然不知道在这一切之后我应该怎么做才能让它发挥作用?
  • 对不起,我忘了说我在开发模式下遇到了这个问题,如果这很重要,Debug 设置为 True,如果我将其设置为 False,我会收到 500 个服务器错误。
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多