Uniвсячина

понемножку о Linux и программировании

Кэш-заглушка для ActiveSupport

Я уже писал как-то, что при тестировании rails-приложений, нужно очень внимательно следить за кэшем. Опция config.perform_caching = false работает только для caches_action в контроллерах и cache в шаблонах. Любые обращения к Rails.cache продолжают работать, потому что по умолчанию там живет AS::C::MemoryStore1.

Конечно мы можем в #setup (TestUnit) или в #before(:each) (RSpec) каждый раз вызывать Rails.cache.clear. Но согласитесь, далеко не в каждом тесте это нужно, а гадать, где используется кэш, а где нет — это неудобно.

Похожая проблема возникает не только в тестах, но и в режиме разработки. Вы изменяете код, но в кэш уже записаны данные старым кодом и нужно производить разные нетривиальные действия, чтобы кэш сбросить.

Специально, чтобы можно было легко отключать кэш в окружениях development и test, я сделал гем dummy-cache. Работает только для rails >= 3.0 (если точнее, то для activesupport >= 3.0).

Добавляем гем в Gemfile:

gem "dummy-cache"

И прописываем в config/environments/development.rb или config/environments/test.rb:

...
config.cache_store = :dummy_store
...

И можете быть уверенны, что Rails.cache больше ничего кэшировать не будет.

  1. ActiveSupport::Cache::MemoryStore

Comments