Stack-Ebene zu tief in aktive Callbacks

8

Ich erhalte das SystemStackError in einer Rails 3 App.

Alle Informationen, die ich habe, sind nutzlos eine Zeile eines Stacktrace (aus dem Log genommen):

%Vor%

Die Frage ist also, wie ich den vollständigen Stack-Trace sehen kann ?

HINWEIS : Ich interessiere mich nicht für warum das passiert, alles was ich sehen möchte ist wo es passiert.

Verwenden: Rails 3.2.3, Unicorn.

Danke.

    
Dmytrii Nagirniak 03.05.2012, 01:44
quelle

5 Antworten

3

Das ist ziemlich komplexer Code in lib / active_support / callbacks.rb, aber es sieht so aus, als würde es verschiedene Callbacks anwenden:: vor,: nach,: herum, um genau zu sein.

Sie könnten versuchen, ein altmodisches "puts before # {name}" vor Zeile 426 zu platzieren und zu sehen, was Sie bekommen.

Ebenso könnte es sein, dass der gesamte Stack-Trace innerhalb des Rails-Stacks liegt und vom Standard backtrace_filter herausgefiltert wird. Wenn Sie backtrace_filter deaktivieren, können Sie den Stack sehen und einen Debugging-Hinweis erhalten. Siehe config / initializers / backtrace_silencers.rb und Kommentar auskommentieren:

  

Rails.backtrace_cleaner.remove_silencers!

    
Rob 26.05.2012, 12:41
quelle
5

Wenn Sie einen aktiven Datensatz in seinem 'before_save' oder 'after_save' aktualisieren, wird er weiterlaufen ... Außerdem, wenn Sie validates_associated an beiden Enden einer Assoziation haben.

Hier ist ein Beispiel, wie ein before_save Callback eine Schleife erstellen kann:

%Vor%     
Andrew Kuklewicz 04.05.2012 01:52
quelle
1

Für diejenigen, die auf Ruby 2.2 upgraden können, sollten Sie eine viel aussagekräftigere Stack-Trace als Ergebnis der Arbeit von Nobu im MRT ( Ссылка ). Ein Wechsel zu JRuby würde auch einen viel tieferen Stack ergeben.

    
Brendon McLean 28.03.2015 10:45
quelle
0

Das ist ein Schuss im Dart, aber ich habe so etwas einmal getroffen, als ich in meinem validates_associated

Kreisreferenzen hatte     
Matthew 03.05.2012 06:33
quelle
0

Ich hatte ein ähnliches Problem. Controller-Aktionen, die vorher / nachher Filter übersprungen haben, würden schließlich mit dem Fehler

auskommen %Vor%

Am besten kann ich sagen, dass die Art, wie Rails Methoden zum Callback-Stack hinzufügt / entfernt, unter starker Belastung einen Fehler erzeugen würde.

Dies sind API-Aufrufe, also habe ich sie auf einen separaten Controller verschoben, der von ActionController :: Base geerbt wurde, wodurch die Notwendigkeit, Filter zu überspringen, entfällt. Das hat mein Problem gelöst. ApplicationController :: Metal ist möglicherweise eine bessere Wahl, je nachdem, welche Funktionen Sie benötigen.

Ich weiß, dass der Fragesteller sich nicht darum gekümmert hat, aber ich vermute, dass andere Rails-Entwickler das gleiche Problem haben und keiner der oben genannten Logging-Vorschläge einen gültigen Stack-Trace für mich zurückliefert.

    
t_itchy 30.09.2013 22:29
quelle