IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Rails 1 => Rails 2 et query cache


Sujet :

Ruby on Rails

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut Rails 1 => Rails 2 et query cache
    Bonjour,

    Je suis actuellement en train de passer une ancienne appli rails 1.2.6 (Ruby 1.8.7) vers Rails 2.3 (l'upgrade vers rails 3 ou 4 sera réalisé plus tard, après le passage en Ruby 1.9).

    J'ai un problème d'actualisation de mes données, et après pas mal de recherches, je pense que cela provient du query cache (qui n'existe pas dans rails1).

    Mais malgré ces recherches je ne comprend pas son fonctionnement.
    J'ai une liste d'items, avec pour chacun des actions correspondantes.
    Après modification d'une action, lorsque j'affiche ma liste l'action modifiée n'est pas à ajour.
    Le seul moyen que j'ai trouvé est de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    items = item.actions
    par 
    items = Actions.find(:all, :conditions => ["item_id = ?", item.id])
    Tout ce que j'ai essayé d'autre venant de divers forum ne fonctionne pas.
    Par exemple, en mettant dans le modèle Item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveRecord::Base.uncached do
              actions = self.action8ds
    end
    il me retourne toujours les actions NON mises à jour.

    J'ai également essayer ActiveRecord::Base.connection.disable_query_cache!
    mais Rails ne connaît pas la fonction disable_query_cache (si je liste les méthodes de ActiveRecord::Base.connection cette méthode n'existe pas).

    Si quelqu'un peut m'expliquer le fonctionnement du cache, et m'aider à comprendre ce qui fonctionne / ne fonctionne pas, cela m'aiderait beaucoup !

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Apparemment le problème ne vient pas du Query Cache car j'ai réussi à le désactiver complètement et le problème persiste.

    Donc peut-être un autre cache ? Sachant qu'en Rails 1.2.6 cela fonctionne parfaitement.

    Une idée ?
    Merci

  3. #3
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    Juin 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : Juin 2013
    Messages : 138
    Points : 231
    Points
    231
    Par défaut
    Wow, c'est vieux tout ça !
    Je te dirais bien d'utiliser fake_arel, déjà, de plus ça simplifiera ton portage vers rails 3.

    Ensuite le seul hack que je vois c'est de refaire un find pour reloader ton item, au lieu de reloader toutes les associations de cet item.
    C'est quelque chose que je n'ai jamais eu à coder mais quand je fais des tests en console ça m'arrive parfois de devoir le faire.

    Une autre side note : je n'aime pas trop nommer quelque chose "actions", j'ai eu des soucis dans le contrôleur et les routes plusieurs fois.
    De plus, c'est un peu confus de voir items = item.actions, je l'appellerais plutôt actions.
    C'est valable notamment quand as pas mal de gems ou conventions qui s'attendront, dans items, d'avoir une liste de Item et pas une liste d'Actions.

    Mais si Item et Action sont le même modèle, j'imagine que tu as un truc arborescent.
    Le mieux serait alors d'utiliser un gem comme awesome_nested_set qui est confortable, propre et plutôt optimisé.
    J'y ai même contribué il y a quelque temps

    Bon courage !

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Merci d'avoir répondu, je continue de chercher.

    Citation Envoyé par abelar_s Voir le message
    Wow, c'est vieux tout ça !
    Je te dirais bien d'utiliser fake_arel, déjà, de plus ça simplifiera ton portage vers rails 3.
    Ok je vais regarder ça.

    Citation Envoyé par abelar_s Voir le message
    Une autre side note : je n'aime pas trop nommer quelque chose "actions", j'ai eu des soucis dans le contrôleur et les routes plusieurs fois.
    De plus, c'est un peu confus de voir items = item.actions, je l'appellerais plutôt actions.
    Euh, en fait c'est en écrivant ce message que je me suis trompée !!!
    Dans le code c'est bien actions = item.actions !

    Et je ne comprend toujours pas pourquoi item.actions ne fonctionne pas alors que le find fonctionne. Je pensais que cela devait donner le même résultat du fait que j'ai désactivé le Query Cache.
    Cela doit donc venir d'autre chose...

Discussions similaires

  1. [MariaDB Galera 10.0.15] Gcache et Query cache
    Par leDistordu dans le forum Administration
    Réponses: 1
    Dernier message: 28/01/2015, 18h15
  2. Passer de Rails 3 vers Rails 4
    Par abelar_s dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 04/09/2013, 13h07
  3. Déploiement de Rails 2 et Rails 3 avec les gemsets de RVM
    Par iptech community dans le forum Ruby
    Réponses: 0
    Dernier message: 22/08/2012, 13h02
  4. Réponses: 0
    Dernier message: 03/11/2010, 17h09
  5. [Query Cache] lister les requetes cachés
    Par mauvais_karma dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/08/2005, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo