Bonjour à tous,
j’ai un site qui tourne sous rails et j’ai une table avec plus de 200000
enregistrements.
J’ai besoin de retraiter ces 200000 enregistrements un par un, mùais qd
je lance ce traitement, seuls les 10000 premiers (environ) passent avant
que ne me soit retourné le message d’erreur suivant:
SystemStackError in GamesController#recalc_player_id
stack level too deep
qq à une idee ?
merci d’avance
Hello,
qq à une idee ?
peux-tu nous montrer le code qui réalise l’opération (au moins la
partie itération ?)
– Thibaut
2009/4/19 Hlp H. [email protected]
J’ai besoin de retraiter ces 200000 enregistrements un par un, mùais qd
je lance ce traitement, seuls les 10000 premiers (environ) passent avant
que ne me soit retourné le message d’erreur suivant:
SystemStackError in GamesController#recalc_player_id
stack level too deep
Erk!
Ca sent l’appel récursif un brin raté
Examine bien ton code: quelque chose me dit que tu ne sors pas de ta
fonction de traitement avant de passer au traitement de l’enregistrement
suivant. Résultat: tu fais sauter ton heap (trop d’appels sur la pile).
Analyse bien ta stack trace, elle va te donner la réponse elle-même
Salut,
voici le code incriminé
Game.find(:all).each do |r|
r.player_id = Player.find_by_id2(r.p1).id
r.save
end
merci bcp
Thibaut Barrère wrote:
Hello,
qq � une idee ?
peux-tu nous montrer le code qui r�alise l’op�ration (au moins la
partie it�ration ?)
– Thibaut
r.save
Tu n’aurais pas qqchose qui se mord la queue à partir d’une callback
before_save ou after_save ?
–
IciMarché fédère l’e-commerce de proximité
http://icimarche.fr
Hello,
Game.find(:all).each do |r|
r.player_id = Player.find_by_id2(r.p1).id
r.save
end
Si tu as 200000 enregistrements, find(:all) va avoir du mal.
Essaie d’utiliser ça à la place:
– Thibaut