Rails缓存不会返回为对象,而是字符串

时间:2014-06-15 03:56:54

标签: ruby-on-rails caching redis

我正在使用redis作为缓存存储,我想缓存公共数据

@links = Rails.cache.fetch "FriendsLinks" do
    Link.where(category_id: 0)
end

但是从Rails.cache.fetch返回的数据是String,而不是List个对象的数组。

我必须从redis中删除缓存,然后下一个请求才有效。但很多时候,它会再次破裂。

编辑: 它只发生在开发环境

1 个答案:

答案 0 :(得分:1)

我找到了问题。

问题是当从redis / memcache检索数据时,相关模型尚未加载。因此,红宝石不能执行解组。

简单的解决方案是设置

config.cache_classes = true

缺点是您在进行代码更改时必须重新启动应用程序。

另一个是在Rails.cache之前放置相关的类,例如

Link
@links = Rails.cache.fetch "FriendsLinks" do
    Link.where(category_id: 0)
end

或者创建一个初始化程序并将其放在config / initializers下

if Rails.env == "development"
    Dir.glob("#{Rails.root}/app/models/**/*.rb") do |model_name|
        require_dependency model_name
    end
end