Rails 4 / Heroku智能过期缓存

时间:2015-09-28 10:08:29

标签: ruby-on-rails ruby-on-rails-4 caching heroku

我们的应用程序中有一些缓存的块。

根据一些登录信息,我们有时会修改其中一些,在这种情况下,我们有一个逻辑使相关的块到期。

当我们在代码中执行更改时,我们需要通过控制台使这些块到期。在这种情况下,我们需要检测并精确确定逻辑,以使所有修改的块到期。例如,如果我们更改封闭流的标头html,它将如下所示:

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

实际上,我认为必须是一种更通用的方式来简单地比较缓存的块与它应该如何呈现的方式,并且只使其html与其缓存版本不同的块到期< / strong>即可。

我想知道是否有一个gem可以执行此任务,如果没有 - 如果有人已经编写了一些部署钩子来执行此任务。

==============更新============

有些想法:

在rake任务中,只要您知道自己拥有哪些片段,就可以获取缓存片段
例如,就我而言,我可以这样做:

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

如果我可以生成非缓存的html ,我可以简单地比较它们,并在缓存的片段不同的情况下使其过期。

有可能吗? 你觉得这个任务有多重?

1 个答案:

答案 0 :(得分: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

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

我希望这是符合您需求的正确方向。