2014-09-17 1 views
0

j'obtiens l'erreur suivante dans une application Rails de production intermittenteNoMethodError utilisant l'ordre par intermittence

NoMethodError (undefined method `values' on priority:Symbol.): 
    app/controllers/things_controller.rb:33:in `index' 

La ligne incriminée ressemble à ceci:

@things = Thing.where(:some_column => 'some_value').order(:priority).reverse 

Thing est un modèle activerecord. La chose étrange est, quand je redémarre l'application, l'erreur disparaît. Ce n'est que dans des circonstances étranges que cela se produit (que je ne peux pas reproduire dans les environnements preprod/dev).

Est-ce que quelqu'un a rencontré quelque chose comme ça avant? Quelqu'un peut-il suggérer comment j'irais diagnostiquer ce bug? La ligne en question ne semble pas être le problème (les journaux en production ne montrent pas non plus la pile complète)

+0

je pense que cela peut être un bug dans des rails 4.1.6. Ramené à 4.1.5 et le problème (et quelques autres) ont disparu. Laissera la question ouverte pour l'instant si quelqu'un d'autre a des problèmes similaires. – Slicedpan

+0

En fait, cela n'a pas résolu ce problème. Toujours se produire par intermittence – Slicedpan

Répondre

0

Après une séance de tirage de cheveux longs, j'ai découvert que cela est dû à un bug de rubinius (2.2. .10 et 2.2.9). Les méthodes de requête ActiveRecord where et order appellent toutes deux enumerable # grep en interne. Une fois que l'application a fonctionné pendant un certain temps ou que certaines conditions inconnues sont remplies, cette fonction cesse de fonctionner correctement lorsque le tableau contient des symboles.

Lorsqu'un bloc est donné en argument à la fonction grep, ce bloc sera toujours appliqué aux éléments de symbole du tableau, quel que soit le motif donné.

rapport de bogue est here

Questions connexes