我们的应用程序中有一些缓存的块。
根据某些登录,我们有时会修改其中的一些,在这种情况下,我们有一个逻辑过期了相关的块。
当我们在代码中执行更改时,我们需要通过控制台终止这些块。在这种情况下,为了使所有修改的块过期,我们需要检测并精确地使用精确的逻辑。例如,如果我们更改关闭流的头html,则如下所示:
a = ActionController::Base.new
Stream.closed.each {|s| a.expire_fragment("stream_header_#{s.id}") }; nil实际上,我认为必须是一种更通用的方法,可以简单地比较缓存的块和应该如何呈现的块,而只过期它们的html与缓存的版本不同的块。
我想知道是否有一个gem完成这个任务,如果没有-如果有人已经编写了一些部署钩子来完成它。
==============更新============
的一些想法:
在rake任务中,只要您知道有哪些片段,就可以获得缓存的片段。
例如,在我的例子中,我可以:
a = ActionController::Base.new
Stream.each do |s|
cached_html = a.read_fragment("stream_header_#{s.id}")
:
:如果我能够生成非缓存的html,我可以简单地比较它们的,并在它们不同的情况下终止缓存的片段。
有可能吗?你认为这个任务会有多重?
发布于 2015-09-29 17:28:49
用这么少的代码就很难回答。
您可以使用
cache @object do
render somthing
end因此,基于对象的散列,缓存将使自身失效。对于呈现模板来说,这也是正确的,因为Rails将在此基础上创建一个has,并将其与对象的散列组合起来,以正确地使其失效。这也可以在更深的层次上工作,这样就可以使呈现树的整个分支失效。
让我向您介绍Rails和俄罗斯娃娃缓存的文档。rails.html
还有一段关于这些家伙缓存的精彩视频:https://www.codeschool.com/courses/rails-4-zombie-outlaws。
它们是免费的,但是看起来你现在必须注册。
我希望这对你的需要是正确的方向。
https://stackoverflow.com/questions/32820416
复制相似问题