rake assets:precompile
创建新文件,如 application-be2b8c92856ffacee861d9e9c2935e3e,但旧文件名为 application-c730047bc2a5cf3a706aa3a9f998ab77.css。它永远不会再被使用了。有没有办法清除更改的资产?我不想删除所有资产目录,因为对于所有未触及的文件来说,这似乎是一种矫枉过正(而且在 git 中看起来很糟糕)
rake assets:precompile
创建新文件,如 application-be2b8c92856ffacee861d9e9c2935e3e,但旧文件名为 application-c730047bc2a5cf3a706aa3a9f998ab77.css。它永远不会再被使用了。有没有办法清除更改的资产?我不想删除所有资产目录,因为对于所有未触及的文件来说,这似乎是一种矫枉过正(而且在 git 中看起来很糟糕)
实际上,您通常应该保留一些旧的资产版本,因为它们可能被缓存的东西或在用户浏览器中打开的页面引用。想象一下,如果用户在您清除资产前一秒访问了您的页面。HTML 被加载,当浏览器随后尝试检索声明的样式表和脚本时,它们就消失了。也许这对您来说是一个极端情况,但如果 HTML 内容来自缓存(例如,您正在缓存内容),它仍然可能在几天后发生。旧内容可能会缓存在中间的某个地方,但即使使用这些资产使用的积极缓存,您也不能依赖它。
那么,您真正想要的是保留一些最新版本并删除真正旧的东西。这正是brake assets:clean
它所做的,如果你愿意,你可以在预编译之前每次运行它。这是显示它保留2个备份的来源。
如果您可以将“2”更改为 0,它将从字面上回答这个问题。我不确定如何更改该值,尽管它是该函数中的一个参数,因此它应该是可配置的。但无论如何,这无论如何都不是一个好主意。
文件名不是根据原文件的md5吗?
这意味着您可以删除整个目录,然后运行rake assets:precompile
,因为文件的内容是相同的,所以您最终会得到相同的文件名(具有相同的内容)。因此,您git status
不会注意到那些“新”文件,因为它们与其存储中已经存在的文件相同。它只会注意到一些文件已被删除。
例如:
$ ls
application-<md5-old>.css
application-<md5-current>.css
$ rm *
$ rake assets:precompile
$ ls
application-<md5-current>.css
$ git status
deleted: application-<md5-old>.css