[英]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.