我使用redis作为缓存存储,我想缓存常用数据
@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end
但是从 Rails.cache.fetch
返回的数据是 String
,而不是 List
对象的数组。
我必须从redis中删除缓存,然后下一个请求才能工作。但很多时候,它会再次破裂。
编辑: 它只发生在开发环境
最佳答案
我已经找到问题所在了。
问题是从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
关于ruby-on-rails - Rails 缓存不返回对象,而是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226413/