Как заставить Rails (2.3.x) MemCacheStore читать значение с сервера? - PullRequest
2 голосов
/ 17 сентября 2010

Короче говоря: у меня есть некоторая логика контроллера, которая запрашивает значение из кэша X раз, ожидая получить другое значение при последующих запросах, если оно фактически изменилось на сервере кэша в промежутке между cache запросов (это все в контексте одного HTTP запроса).

Однако кажется, что Rails MemCacheStore оборачивается Strategy::LocalCache, поэтому независимо от того, сколько раз я запрашиваюЗначение всегда будет возвращать первое значение, полученное с сервера, независимо от того, изменилось ли это значение на сервере между запросами.

Я надеялся, что для метода read() была какая-то недокументированная опция :force,но не такая удача.

Так что моей следующей надеждой было как-то обезопасить его, чтобы получить то, что мне нужно, но я в тупике.

Любой совет?

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

Получил работу (благодаря предложению @KandadaBoggu) путем обратного портирования и монтирования патчей функции bypass_local_cache из activesupport 3.0

module ActiveSupport
  module Cache
    module Strategy
      module LocalCache
        protected
        def bypass_local_cache
          save_cache = Thread.current[thread_local_key]
          begin
            Thread.current[thread_local_key] = nil
            yield
          ensure
            Thread.current[thread_local_key] = save_cache
          end
        end
      end
    end
  end
end
1 голос
/ 21 сентября 2010

Я не уверен, что это сработает, но стоит попробовать:

cache.send(:bypass_local_cache) { cache.read("bar")}

Где bar - ключ, к которому вы пытаетесь получить доступ.

Примечание: bypass_local_cache - этоприватный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...