为什么即使没有任何变化,Rails 3资产管道也会重新生成资产?

时间:2013-04-13 00:00:25

标签: ruby-on-rails asset-pipeline

我在Heroku上运行Rails 3.2应用程序,因此需要使用资产管道。

现在关于Rails资产管道的一段时间让我感到困惑的一件事是这个小实验的结果:

git rm -r public/assets

git commit -m "Nuke all generated assets"

RAILS_ENV=production bundle exec rake assets:precompile

git add .

RAILS_ENV=production bundle exec rake assets:precompile

具体来说,如果我检查我的分阶段和非分阶段更改之间的区别,我发现第二个资产预编译已经重新生成/ refingerprinted /提醒我所有的CSS和JS。

为什么在我在资产编辑之间没有改变任何内容时会发生这种情况?

显然当前的时间戳是以某种方式参与的,但是为什么就是那样 - 再次 - 我什么都没改变?

最后,是否有任何方法可以更改资产预编译,以便仅在自上次预编译后更改CSS和JS资产时才重新生成它们?

2 个答案:

答案 0 :(得分:1)

您可以使用Capistrano执行此操作,并基本上针对旧版本检查当前部署并查看更改的文件。这是我了解它的地方。

https://github.com/capistrano/capistrano/issues/227 http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

答案 1 :(得分:0)

它会改变,因为每次你创建一个新的gzip文件时,即使内容相同,生成的文件也会不同,源代码控制系统也不知道如何处理这个问题(而且不应该这样做)这样做。)

您应该查看this answer以了解要添加到gitignore的文件。

您也可以在github中查看this discussion