Question

J'ai un problème où activeRecord.find retourne des lignes incorrectes, mais uniquement en production. Voici un exemple de code:

    <% puts group_hash %>
    <% puts Group.find(group_hash['id'].to_i).inspect %>

quelles sorties: (tous les attributs autres que «id» ont été tronqués pour la lisibilité)

    {"id"=>550058, ....}
    #<Group id: 265492, ...>

Comment Group.find (550058) peut-il produire un enregistrement avec l'ID 265492?

Je crois qu'un problème similaire se produit à quelques endroits. Cela semble se produire lorsque l'enregistrement a été chargé récemment (dans l'échantillon ci-dessus, le groupe est chargé précédemment dans le contrôleur), donc je soupçonne le cache.

Le code s'est bien fonctionné sous Rails3, le moment Rails4 est déployé, ce problème se produit. Malheureusement, je ne peux pas reproduire le problème dans des environnements sans production (même sur un clone complet de production sur un hôte distinct, pointant la base de données de production), donc peut-être la charge du serveur est un facteur contributif.

Des idées?

Était-ce utile?

La solution

J'ai réussi à résoudre ce problème. Je n'ai toujours aucune idée de comment ni pourquoi ce qui précède aurait pu se produire (sûrement m = Model.find(id); (id == m.id) devrait toujours être vrai!), Bien que je soupçonne toujours le cache, car cela ne semblait se produire que si le cache était amorcé.

J'ai fait ce qui suit, je crois que quelque chose dans ces étapes a résolu le problème:

  1. taillé mon Gemfile Supprimer quelques joyaux inutilisés comme Dalli et supprimer la contrainte de version tous les cas sauf quelques-uns pour permettre la mise à jour.
  2. Cours bundle update résultant en de nombreuses dépendances mises à jour
  3. J'ai été utilisé un buildpack personnalisé sur Heroku (fourchu du rubis officiel), j'ai tiré les derniers mois de changements en amont.

Merci à tous ceux qui ont lu et commenté. Je suppose que quelque chose était juste mal dans mes dépendances de gemmes ou l'environnement Heroku.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top