【问题标题】: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 中删除缓存,然后下一个请求才能工作。但很多时候,它会再次破裂。

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

【问题讨论】:

  • 你得到什么样的字符串?
  • @charinten 是列表对象的序列化结果

标签: 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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2019-03-25
    • 1970-01-01
    • 2013-10-08
    • 2017-07-18
    相关资源
    最近更新 更多