ruby-on-rails - Rails 缓存不返回对象,而是字符串

标签 ruby-on-rails caching redis

我使用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/

相关文章:

Laravel 监控工具

java - 如何缓存 InputStream 以供多次使用

redis - 如果主服务器使用 redisio cookbook 出现故障,我如何自动连接到从服务器

ruby-on-rails - 在 Docker : "Please point sidekiq to a Rails 4/5 application" 中启动 sidekiq 时出错

ruby-on-rails - Rails API 离线文档

ruby-on-rails - 使用 Twitter Bootstrap 设计电子邮件联系表单的样式

ruby-on-rails - rails : how do you access RESTful helpers?

ruby-on-rails - ruby 中的继承和扩展

java - 设置实体中缓存​​的到期间隔 (eclipselink/JPA 2.0)

redis - 使用 StackExchange.Redis 的 RedisTimeoutException 突发