【问题标题】:What's the way to clear not used assets?有什么方法可以清除未使用的资产?
【发布时间】:2012-05-10 07:53:40
【问题描述】:
rake assets:precompile
创建新文件,如 application-be2b8c92856ffacee861d9e9c2935e3e,但旧文件名为 application-c730047bc2a5cf3a706aa3a9f998ab77.css。它永远不会再被使用了。有没有办法清除更改的资产?我不想删除所有资产目录,因为对于所有未触及的文件来说,这似乎是一种矫枉过正(而且在 git 中看起来很糟糕)
【问题讨论】:
标签:
ruby-on-rails
rake
asset-pipeline
【解决方案1】:
实际上,您应该通常保留一些旧资产版本,因为它们可能被缓存的内容或在用户浏览器中打开的页面引用。想象一下,如果用户在您清除资产前一秒访问了您的页面。 HTML 被加载,当浏览器随后尝试检索声明的样式表和脚本时,它们就消失了。也许这对您来说是一个极端情况,但如果 HTML 内容来自缓存(例如,您正在缓存内容),它仍然可能在几天后发生。旧内容可能会缓存在中间的某个地方,但即使使用这些资产使用的激进缓存,您也不能依赖它。
那么,您真正想要的是保留一些最新版本并删除真正旧的东西。这正是brake assets:clean 所做的,如果您愿意,您可以在预编译之前每次运行它。这是the source,显示它保留了 2 个备份。
如果您可以将“2”更改为 0,它将从字面上回答这个问题。我不确定如何更改该值,尽管它是该函数中的一个参数,因此它应该是可配置的。但无论如何,这无论如何都不是一个好主意。
【解决方案2】:
文件名不是根据原文件的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