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.
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!
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:
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.
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.
Tags und Links ruby ruby-on-rails activerecord stack-trace activesupport