手动填充Rails中的缓存

时间:2013-02-25 09:39:06

标签: ruby-on-rails ruby ruby-on-rails-3 caching fragment-caching

在Rails 3.x中我想手动预编译我的缓存,并在模型实例和静态HTML的视图中使用片段缓存。

当请求页面时,Rails会懒惰地填充缓存,这会导致首次加载时加载时间变慢。

所以给出了这个示例代码:

  <% cache("index_chart") do %>
    <%= high_chart("chart", @h) %>  
  <% end %>

如何使用Ruby手动填充缓存?

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是编写一个shell脚本,该脚本向覆盖缓存的各种URL发出GET请求,也称为缓存预热。

一个简单的设置是在您的应用程序中创建一个名为scripts / cache_warmer的shell脚本,然后您可以从服务器命令行,部署脚本或resque等后台处理器手动触发它。

# Sample scripts/cache_warmer

GET http://localhost/
GET http://localhost/some_other_page

另一种选择,如果你想要它更聪明一点。例如能够点击资源的成员网址就是使用rake任务。

# lib/tasks/cache_warmer.rake

task :cache_warmer => :environment do
  Resource.all.each do |resource|
    Net::HTTP.get_response("http://localhost/resources/#{resource.id}")
  end
end

这当然只是一个基本的例子。您的实际代码会根据您尝试的路线和有多少路线而有所不同。您可能希望查看多线程的选项以获得更高的并发性,或者使用备用“工作”服务器来执行请求。天空是最重要的,这取决于你的设置。