2014-05-08 105 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