Ok donc,
Contexte complet:
L'objet sérialisé avait sa classe dans un fichier Lib. Les fichiers lib sont automatiquement chargés par des rails en utilisant la convention de dénomination standard. La Rails.cache.read
était la première étape de toute action dans mon application (à l'exception de l'action init qui crée l'objet pour la première fois). Donc, j'ai eu une erreur sur toute autre action: undefined method for String
. C'était parce que le Rails.cache.read
me renvoyait une chaîne (objet sérialisé) au lieu de mon instance d'objet.
Explication:
On dirait que le maréchal ne pas utiliser le système Rails pour trouver des constantes non déclarées. Donc, quand j'appelais Rails.cache.read
le Marshal.load
tombait et read
renvoyait le String
sans jeter aucune erreur.
La solution:
J'ai simplement ajouté un load
de ma lib dans mon contrôleur d'application. De cette façon, toutes les constantes sont déjà chargées quand Rails.cache.read
appels Marshal.load
Notez que j'ai utilisé load
au lieu de require
en mode développement pour éviter d'avoir à redémarrer mon serveur après chaque modification.
Espérons que cela aidera quelqu'un.
Quels sont exactement vos problèmes? Vous devez être spécifique. Veuillez l'élaborer ici pour que nous puissions vous aider. –
@jpartogi: J'ai trouvé la solution par moi-même. Ce n'était pas une erreur de configuration mais les symptômes me faisaient penser que c'était le cas. Je posterai une réponse avec une explication. Merci :) –