Ok so,
Complete context :
The serialized object had his Class into a Lib files. The lib files are auto loaded by rails using using the standard naming convention.
The Rails.cache.read
was the first step of any actions in my application (except the init action which creates the object for the first time).
So, i had an error on any other action : undefined method for String
. This was because the Rails.cache.read
was returning me a String (serialized object) instead of my object instance.
Explanation :
It looks like Marshal doesn't use the Rails system to find Undeclared constants. So, when i was calling Rails.cache.read
the Marshal.load
was falling and read
was returning the String
without throwing any error.
The Solution :
I simply added a load
of my lib in my application controller. That way, all the constants are already loaded when Rails.cache.read
calls Marshal.load
Note that i used load
instead of require
in development mode to avoid to have to restart my server after each modification.
Hopefully this will help someone.