2015-09-28 41 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

他们是免费的,但它看起来像你现在注册。

我希望这是您的需要正确的方向。