使用机架缓存进行有问题的缓存

时间:2015-04-24 03:31:36

标签: ruby http caching rack rack-cache

我试图在显示here的示例中从本地缓存来自服务器的响应。

#!/usr/bin/env ruby

require 'restclient/components'
require 'rack/cache'
RestClient.enable Rack::Cache,
                  :metastore => 'file:/tmp/cache/meta',
                  :entitystore => 'file:/tmp/cache/body',
                  :verbose => true
RestClient.get 'http://www.google.com/intl/en/policies/privacy/?fg=1'

不知何故,我总是将 miss 作为回复,文件夹为空。我想缓存对我来说不起作用。我做错了什么?

cache: [GET /intl/en/policies/privacy/?fg=1] miss

更新

repsponse标题包含:

Cache-Control: must-revalidate, private, max-age=0 

所以我想我的问题是如何在处理之前拦截响应并修改响应头字段?

1 个答案:

答案 0 :(得分:2)

Rack :: Cache符合标准",在这种情况下,它意味着它会关注缓存标头。它有an option for allow_reload,但这对您所看到的特定标题没有帮助。

所以要使用Rack :: Cache,你需要先拦截请求,可能是monkeypatching Rack :: Cache,或者你需要分叉Rack :: Cache以允许你的行为想。我不会在这里做任何一件事。

在这种情况下,我建议不要使用Rack :: Cache,而是直接根据原始RestClient编写一个非常简单的缓存。请自行检查缓存新鲜度,并在需要时仅发送请求。