4

我将 Jbuilder 用于我的 JSON API 输出,现在我想使用 Rails 3.2.13 的“cache_digest”gem 添加缓存。

它工作正常,缓存模板已创建并从缓存中读取,但问题是,如果我更改模型条目,例如更改“标题”,它不会使缓存过期并且它仍然显示旧标题。

这是我的 jbuilder 模板索引:

json.cache! "news" do |json|
    json.array!(@news) do |news|
        json.id news.id
        json.title news.title
        json.excerpt news.excerpt
        json.content strip_links news.content
        json.image news.image
        json.source news.source
        json.published_at news.published_at
        json.created_at news.created_at
    end
end

我正在通过 RailsAdmin 界面更改属性。

4

1 回答 1

4

解决方案是将@news 集合而不是“新闻”字符串作为缓存键传递,例如:

json.cache! @news do |json|
    json.array!(@news) do |news|
        json.id news.id
        json.title news.title
        json.excerpt news.excerpt
        json.content strip_links news.content
        json.image news.image
        json.source news.source
        json.published_at news.published_at
        json.created_at news.created_at
    end
end

当我第一次尝试这个时,当它试图在磁盘上创建缓存文件时,我收到一个错误消息“文件名太长”。这是因为我的 @news 集合太大(对象太多),所以我将其更改为返回更少的对象。这对于 memcached 之类的东西不会有问题,但是当保存到磁盘时,文件名的长度受到操作系统的限制。

于 2013-05-24T17:00:19.653 回答