2010-08-11 7 views
0

Je vais avoir des problèmes en essayant d'utiliser Memcached dans Rails 3 Application ...Configurer Memcached avec Rails 3

Ma question est assez simple: Comment je suis censé configurer Memcached pour le rendre fonctionne avec Rails 3?

Merci pour votre aide!

Edit:

On dirait que l'objet est pas correctement désérialisée par le Rails.cache.read, peu importe :raw => true ou :raw => false mais le désérialisation fonctionne si elle est faite juste après la Rails.cache.write

+0

Quels sont exactement vos problèmes? Vous devez être spécifique. Veuillez l'élaborer ici pour que nous puissions vous aider. –

+0

@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 :) –

Répondre

3

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.