0

スイーパーに次のメソッドがあります。

def expire_topic_articles_cache_for topic_id
  キー = fragment_cache_key :controller => :記事、:action => :index、:topic_id => topic_id
  Rails.logger.debug "トピック #{topic_id} の記事リスト キャッシュを期限切れにする"
  Rails.logger.debug " キー #{key} を使用"
  # フラグメントが複数のページをカバーしているため、RegExp を使用
  expire_fragment %r{#{key}}
終わり

問題は、fragment_cache_key の呼び出しにあります。1 つのコード パスでは正しいキーを返しますが、別のコード パスでは nil を返します。どちらも同じ topic_id で呼び出され、両方とも同じコントローラーによってトリガーされますが、異なる観測モデルからトリガーされます。

これは私には意味がありません。fragment_cache_key が同じ入力に対して同じ結果を返すことを期待しています。同じキャッシュ構成が使用されている場合、副作用はありません (両方のコード パスで同じです)。

4

1 に答える 1

0

ため息...しばらくここを掘り下げた後、私はこの答えを見つけました:

https://stackoverflow.com/a/2275001/124536

それは私を正しい道に連れて行きました:コントローラーは、スイーパーをトリガーしたこの特定のアクションに対して cache_sweeper を構成しませんでした。とにかく奇妙なことに、スイーパーはトリガーされましたが、正しく機能していませんでした。

于 2013-07-29T19:45:30.753 に答える