我试图在显示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
所以我想我的问题是如何在处理之前拦截响应并修改响应头字段?
答案 0 :(得分:2)
Rack :: Cache符合标准",在这种情况下,它意味着它会关注缓存标头。它有an option for allow_reload,但这对您所看到的特定标题没有帮助。
所以要使用Rack :: Cache,你需要先拦截请求,可能是monkeypatching Rack :: Cache,或者你需要分叉Rack :: Cache以允许你的行为想。我不会在这里做任何一件事。
在这种情况下,我建议不要使用Rack :: Cache,而是直接根据原始RestClient编写一个非常简单的缓存。请自行检查缓存新鲜度,并在需要时仅发送请求。