Кэш Rails из консоли ничего не возвращает nil

Я не могу ничего увидеть в кеше с консоли ни в разработке, ни в производстве.

Для разработки я включил кеширование и установил его в хранилище памяти, в производстве я использую гем dalli и Memcachier на Heroku.

Каждый ключ, который я пробую, возвращает ноль.

Однако в процессе разработки, если я поставлю binding.pry перед выполнением Rails.cache.fetch, я могу сделать там Rails.cache.read и увидеть, что что-то возвращается, и действительно, если это так, выполнение не переходит в блок fetch.

Из консоли, если я попытаюсь Rails.cache.read использовать тот же ключ, который только что вернул кэшированный результат в консоли pry точки останова, я ничего не получу. Вроде у консоли отдельный кеш, как будто из консоли делаю Rails.cache.write("whatever", "blah") и Rails.cache.read("whatever"), получаю в ответ "бла", как и положено.

Есть ли способ поэкспериментировать с кешем работающего сервера из консоли?


person Hsiu Dai    schedule 25.07.2013    source источник


Ответы (1)


Измените хранилище кеша: хранилище памяти просто хранит все в памяти процесса, поэтому каждый экземпляр приложения будет иметь отдельный кеш. В частности, консоль не увидит ничего, что установлено в работающем веб-приложении.

Вы можете использовать хранилище файлов (которое хранит данные во временных файлах в tmp) или локальное хранилище dalli — memcached очень легко запустить.

person Frederick Cheung    schedule 25.07.2013
comment
Хорошо, это работает для разработки, хотя я все еще ничего не получаю в производстве, но я приму ваш ответ, потому что он отвечает на вопрос, который я задал. Для кэширования фрагментов в представлении, где я делаю - cache("the_key") do в HAML, могу ли я получить к нему доступ из консоли с помощью Rails.cache.read? Даже после перехода на файловое хранилище так не кажется, даже в разработке. Как я могу получить этот кешированный материал? - person Hsiu Dai; 25.07.2013
comment
NM, я нашел свой собственный ответ, используя ActionController::Base.new.fragment_cache_key("the_key"), я получаю слегка измененный ключ кэша (в данном случае с добавленным к нему view/) и могу читать с Rails.cache.read и этим модифицированным или просто выполнять ActionController::Base.new.read_fragment("the_key") с немодифицированным ключом для чтения. Спасибо за Ваш ответ! - person Hsiu Dai; 25.07.2013