Проблема Memcached с Rails 3. Объект не десериализован во второй раз - PullRequest
3 голосов
/ 17 ноября 2010

У меня проблема с использованием memcached в Rails 3

Следующее в моем контроллере

@last_post = Rails.cache.fetch('last') {Post.last}

Из вида звоню @last_post.title

При первой загрузке представления отображается заголовок последнего сообщения. После обновления представления я получаю сообщение об ошибке undefined method 'title' for #<String:0x8007ae0>

Похоже, что объект не десериализуется во второй раз.

Я что-то не так делаю? Что я могу сделать, чтобы это исправить? (Ruby 1.8.7, Rails 3.0.1)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Я думаю, что это связано с Marshal.load, в основном rails магически загружает все классы для вас, но когда вы вызываете Rails.cache.fetch, в какой-то момент он вызывает Marshal.load, который ничего не знает о зависимости Railsзагрузка и может иногда завершаться сбоем (неопределенный класс / модуль)

Мое решение состоит в том, чтобы просто добавить

require_dependency 'post'

в ваш контроллер, который должен загрузить класс для библиотеки Marshal, чтобы увидеть

1 голос
/ 21 февраля 2014

Я нашел решение! Убедитесь, что ваш магазин установлен в development.rb независимо от того, включено кэширование или нет. Ака добавить это к development.rb

config.cache_store = :dalli_store

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