gpt4 book ai didi

html - 使用 Django 进行静态文件版本控制

转载 作者:太空狗 更新时间:2023-10-29 16:48:29 34 4
gpt4 key购买 nike

我正在为我的 CSS/Javascript 设置远期过期 header ,这样浏览器就不会在缓存文件后再次请求这些文件。我还有一个简单的版本控制机制,这样如果文件发生变化,客户就会知道。

基本上我有一个模板标签,我做了类似的事情

<script type="text/javascript" src="{{ MEDIA_URL }}{% versioned "javascript/c/c.js" %}"></script>

这将成为

<script type="text/javascript" src="http://x.com/media/javascript/c/c.min.js?123456"></script> .

模板标签打开一个文件 javascript/c/c.js.v,它在其中找到版本号并将其附加到查询字符串。该版本由 shell 脚本生成(目前手动运行,可能会添加预提交 Hook ),它检查文件是否已更改(使用 git diff )。

一切正常,除了:

我也想为图像实现相同类型的版本控制。但是图像可以从 CSS 中引用——这是一个静态文件(由 nginx 提供)——所以那里没有模板标签。

什么是更好的文件版本控制方法?

或者,我正在考虑用一个中间件替换模板标签,该中间件在返回响应之前更改所有链接。这比可以被错误省略的模板标签要好。但是还是没有解决CSS引用图片的问题。

此外,我知道将版本作为查询字符串的一部分可能会导致某些代理不缓存文件时出现问题 - 因此我考虑将版本作为文件名的一部分 - 例如 javascript/c/c.123456.js

注意:看起来没有办法使用 Django 解决这个问题(很明显 - 因为我什至不通过 Django 提供 CSS)。但是必须有一个解决方案,也许涉及一些 nginx 技巧。

最佳答案

样式表 Assets

对于样式表引用的 Assets ,最好使用 Sass & Compass。 Compass 有一个 mixin,它会自动在样式表中引用的静态 Assets 的末尾添加版本查询参数。版本号仅在您重建样式表时发生变化(当您在本地开发时,这对于 compass watch 来说是微不足道的)。

模板资源

对于其他文件,我实际上会使用某种重写 python 模块的后拉式 Hook ,其唯一目的是包含当前版本。

/var/www/aweso.me/
./files/
./private-files/
./static/
./project/
./manage.py
./fabfile.py
./.gitignore
./base/
./__init__.py
./wsgi.py
./settings/
./__init__.py
./modules
./__init__.py
./users.py
./email.py
./beta.py
./redis.py
./haystack.py
./version.py
./default.py
./local.py
./live.py

您的帖子拉钩将创建:

/var/www/aweso.me/project/base/settings/version.py

这将包含最新的(或以前的)git commit hash :

__version__ = "0763j34bf"

然后在您的 settings.live 中使用一个简单的 from .version import __version__ as ApplicationVersion,您的模板标签可以简单地使用 from settings import ApplicationVersion 将该查询参数写入缓存破坏器。

关于html - 使用 Django 进行静态文件版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5976612/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com