2015-09-28 82 views
2

我們在應用程序中已經緩存了一些塊。Rails 4/Heroku智能到期緩存

根據某些登錄,我們有時會修改其中的一些,在這種情況下,我們有一個邏輯會過期相關的塊。

當我們在代碼中執行更改時,我們需要通過控制檯過期這些塊。在這種情況下,我們需要檢測並精確確定邏輯,以便過期所有修改的塊。舉例來說,如果我們改變封閉的流標頭的HTML,它看起來像:

a = ActionController::Base.new 
Stream.closed.each {|s| a.expire_fragment("stream_header_#{s.id}") }; nil 

其實,我認爲必須是一個更通用的方法簡單地比較,應該如何呈現緩存塊, 只會過期其html與其緩存版本不同的塊。

我不知道是否有一個gem來完成這個任務,如果沒有 - 如果有人已經寫了一些部署鉤子來做到這一點。

============== UPDATE ============

一些想法:

在rake任務能及得到緩存片段,只要你知道你有哪些片段。
例如,在我來說,我可以這樣做:

a = ActionController::Base.new 
Stream.each do |s| 
    cached_html = a.read_fragment("stream_header_#{s.id}") 
    : 
    : 

如果我能產生非緩存HTML我可以簡單地比較他們,並在到期時的緩存片段它們是不同的。

可能嗎? 你覺得這個任務有多重?

回答

0

這麼簡單的代碼很難回答。

可以使用

cache @object do 
    render somthing 
end 

因此,基於緩存將傷病的對象本身的哈希值。這對於渲染模板也是如此,因爲Rails將在此上創建一個has,並將其與對象的散列組合,以使其無效。這也可以在更深層次上工作,並且以這種方式可以使渲染樹的整個分支無效。

讓我來指點一下Rails和俄羅斯娃娃緩存的文檔。 http://edgeguides.rubyonrails.org/caching_with_rails.html

還有在高速緩存的偉大的視頻通過這些傢伙: https://www.codeschool.com/courses/rails-4-zombie-outlaws

他們是免費的,但它看起來像你現在註冊。

我希望這是您的需要正確的方向。