rake assets:precompile
创建像application-be2b8c92856ffacee861d9e9c2935e3e这样的新文件,但是有一个名为application-c730047bc2a5cf3a706aa3a9f998ab77.css的旧文件。它将永远不会被使用。有没有办法清理变更后的资产?我不想删除所有资产目录,因为这对于所有那些未受影响的文件来说似乎有点过分(而且它在git中看起来很糟糕)
答案 0 :(得分:3)
实际上你应该通常保留一些旧的资产版本,因为它们可以被缓存的东西引用,或者在用户的浏览器中打开一个页面。想象一下,如果用户在清除资产之前一秒钟访问了您的页面。 HTML被加载,当浏览器随后尝试检索声明的样式表和脚本时,它们就消失了。也许这是一个适合你的角落,但如果HTML内容来自缓存(例如,你可能是内存缓存),它可能会在几天后发生。旧内容可能会缓存在中间的某个位置,但即使使用与这些资产一起使用的激进缓存,也无法依赖它。
你真正想要的是保留一些最新版本并删除真正旧的东西。这正是brake assets:clean
所做的事情,你可以在预编译之前每次运行它。这是the source,显示它保留了2个备份。
如果您可以将“2”更改为0,它将按字面意思回答此问题。我不知道如何更改该值,虽然它是该函数中的参数,因此它应该是可配置的。但无论如何,无论如何,这不是一个好主意。
答案 1 :(得分: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