gpt4 book ai didi

ruby-on-rails - rails - 使用 Rails.cache 会出错

转载 作者:行者123 更新时间:2023-12-04 06:15:48 24 4
gpt4 key购买 nike

我正在尝试缓存一个昂贵的查询,该查询在 Rails 3 中整个站点的多个请求中重复使用。

当用户点击表格查看报告或当用户点击查看 map 或当用户点击打印某些内容时,将执行此查询:

reports.where{(time > my{range.begin}) & (time < my{range.end})}

这是一个开销很大的查询,可能会产生数千条记录。我想缓存它,以便在第一次调用后将其存储在缓存中,直到查询中的一条记录被修改(例如更新)。

我用这个替换我的查询:

Rails.cache.fetch('time_reports') { reports.where{(time > my{range.begin}) & (time < my{range.end})} }

但它引发了一个异常:

TypeError (can't dump anonymous class #<Module:0x007f8f92fbd2f8>):

作为问题的一部分,我想知道使用 Rails.cache.fetch 是否还需要我在 config/environments/production.rb 中添加以下内容:

config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com" //obviously I would use my ip

最佳答案

您正在尝试将 Arel 关系转储到您的缓存存储中,不幸的是,这是不可能的。你想转储结果数组,所以这样做:

Rails.cache.fetch('time_reports') { reports.where{(time > my{range.begin}) & (time < my{range.end})}.all }

……或者……

Rails.cache.fetch('time_reports') { reports.where{(time > my{range.begin}) & (time < my{range.end})}.to_a }

这将使关系成为一个真正的数组,您可以按照正常方式将其存储在 memcached 中。

关于ruby-on-rails - rails - 使用 Rails.cache 会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com