Rails 3.2:在到期后立即预渲染(烘焙)新的页面缓存?

我有一个应用程序,它使用caches_page进行某些控制器/操作。 为了使缓存失效,我使用扫地机。 总而言之,它是一个标准的解决方案。

但是,因为某些更改可能会导致服务器上出现一些请求(因为推送通知已发出并可能触发客户端设备获取新数据),所以我希望能够预先呈现缓存,因此在请求滚动之前就已经准备好了。当然,我可以等待第一个请求自动写入缓存,但在这种情况下,我知道请求会来,可能会有很多,并且它们可能在附近-同时。 所以我想准备好缓存。

为了增加一些复杂性,更新是通过普通的网页完成的,并在一个标准的,主要是脚手架控制器中处理,而我想要缓存的“页面”是作为API的完全不同的控制器的JSON响应。

那么,我如何从清扫器(或处理缓存过期更新的控制器)触发立即写入的新页面缓存?

另一种说法可能是:如何从一个控制器向另一个控制器发出内部请求?


编辑:结束你做的事情,如下所示。 它不是非常优雅,但它很有效

 class ModelSweeper  /dev/null &" end end 

加热服务器的缓存可能超出了应用程序逻辑的范围。 在使用包裹curl命令并循环遍历网站中所有区域的rake任务之前,我已经实现了缓存加温系统。

 # lib/tasks/curl.rake desc "curl" task :curl do paths.each do |path| `curl #{path}` end end 

您可以通过从Rails项目根目录中发出“rake curl”来调用此任务。

或者,您可以在缓存过期后从sweeper方法内部调用此rake任务(包装curl)。 查看Railscast Ryan Bates在Rails应用程序代码中调用后台rake任务时所做的: http : //railscasts.com/episodes/127-rake-in-background

有关curl的更多信息,请访问: http : //curl.haxx.se/docs/manpage.html