5

アプリケーションのトップグループを表示するページがあります。リーダーボードの計算にはコストがかかるため、次のように1時間結果をキャッシュします。

@groupboard = Rails.cache.fetch("top_groups", :expires_in => 1.hour) do  
  Group.top_groups
end

これは、キャッシュが最初に書き込まれた後にエラーを発生させます。コンソールをざっと見てみると、Group.top_groupsが次のようなアイテムの配列を返していることがわかります。

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, 3887]

キャッシュから返された結果を見ると、次のようになります。

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, :@new_record_before_save], false, 3887]

@new_record_before_saveと'false'値がキャッシュ内のこのオブジェクトのすべてのエントリに挿入される原因を誰かが知っていますか?

Dalli、Memcached 1.4.9、Rails 3.2.4、Ruby1.9.2を使用しています

4

1 に答える 1

4

オブジェクトが関連付けられているARオブジェクトにRailsキャッシュのバグがあります。次のことを試してください。

@groupboard = Rails.cache.fetch("top_groups", :expires_in => 1.hour) do  
  Group.top_groups.map(&:reload)
end

https://github.com/mperham/dalli/issues/250で詳細を参照して ください

于 2012-10-30T03:08:44.890 に答える