【问题标题】:Rails Cache Doesn't Return As Objects, but StringsRails 缓存不作为对象返回,而是作为字符串返回
【发布时间】:2014-08-05 06:11:54
【问题描述】:
我使用redis作为缓存存储,我想缓存常用数据
@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end
但是从Rails.cache.fetch 返回的数据是String,而不是List 对象的数组。
我必须从 redis 中删除缓存,然后下一个请求才能工作。但很多时候,它会再次破裂。
编辑:
它只发生在开发环境中
【问题讨论】:
标签:
ruby-on-rails
caching
redis
【解决方案1】:
我已经找到问题所在了。
问题是从 redis/memcache 检索数据时,相关模型尚未加载。所以 ruby 不能执行 unmarshal。
简单的解决方法是设置
config.cache_classes = true
缺点是您在更改代码时必须重新启动应用程序。
另外一种就是把相关的Class放在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