簡體   English   中英

rails-使用Rails.cache會出錯

[英]rails - using Rails.cache gives error

我正在嘗試緩存一個昂貴的查詢,該查詢會在Rails 3的整個站點的多個請求中重復使用。

當用戶單擊表格以查看報告時,或者當用戶單擊以查看地圖時,或者當用戶單擊以打印內容時,將執行以下查詢:

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中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM