2014-05-08 71 views
2

轨道4改变了资产按手印的方式(对浏览器的缓存清除):轨道4,5资产管道:既没有指纹编译

Old Strategy: application.css?12345 
Rails 3.2: application-12345.css and application.css 
Rails 4.0: application-12345.css 

虽然这是非常合情合理的,这是一个问题,如果样式表由另一项服务(在我们的案例中为Zendesk)使用。这个外部站点需要来自Rails应用程序的CSS,但它不知道指纹(又名:摘要)。

有没有办法编译所有资产都有和没有指纹?或者,也许另一种方法来解决这个问题?

+0

预编译过程将创建一个清单JSON文件,其中包括关于指纹的文件的详细信息。清单文件本身是指纹识别的,但是也许你可以将它作为编译任务的一部分发布出去。 – alxndr

+0

为zendesk有一个单独的样式表,不要放在资产摘要中?应用程序样式表不应该真的提供不属于应用程序的外部应用程序? – Zabba

+0

@Zabba相信我,在这种情况下使用Zendesk的样式表是有意义的。 – svoop

回答

2

我写了一个rake任务来获得点菜的Rails 3.2回未留下指纹文件:

namespace :assets do 
    desc "Create symlinks without cache busting digest" 
    task :create_symlinks_without_digest => :environment do 
    Dir.glob(Rails.root.join('public', 'assets', '**', '*')).each do |item| 
     if File.file?(item) && item.match(/-[a-f0-9]{32}/) 
     FileUtils.ln_s Pathname(item).basename, item.sub(/-[a-f0-9]{32}/, '') 
     end 
    end 
    end 
end 
+0

这真的很有用,谢谢! – Simon

+0

先生,您是一位绅士和学者。 –

+0

值得指出的是,对于我来说,在Rails 4.2上,指纹是64而不是32个字符 – RubberDucky