Хорошо,
Полный контекст:
Сериализованный объект имеет свой класс в файлах Lib.Файлы lib автоматически загружаются rails с использованием стандартного соглашения об именах.Rails.cache.read
был первым шагом любых действий в моем приложении (кроме действия init, которое создает объект в первый раз).Итак, у меня была ошибка при любом другом действии: undefined method for String
.Это было потому, что Rails.cache.read
возвращал мне строку (сериализованный объект) вместо моего экземпляра объекта.
Объяснение:
Похоже, маршал не использует систему Rails для поиска Undeclaredконстанты.Поэтому, когда я звонил Rails.cache.read
, Marshal.load
падал, а read
возвращал String
без каких-либо ошибок.
Решение:
Я просто добавил load
моей библиотеки в контроллере приложения.Таким образом, все константы уже загружены, когда Rails.cache.read
вызывает Marshal.load
Обратите внимание, что я использовал load
вместо require
в режиме разработки, чтобы избежать перезапуска сервера после каждой модификации.
Надеюсь, это кому-нибудь поможет.