1

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

当页面被请求时,Rails 会延迟填充缓存,这会导致第一次加载时加载时间变慢。

所以给出这个示例代码:

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

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

4

1 回答 1

3

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

一个简单的设置是在您的应用程序中创建一个名为 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

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

于 2013-02-25T09:53:16.403 回答