SystemStackError, вызванный изменением файлов во время работы сервера?
На моей машине разработки приложений RoR (локальный сервер, OSX 10.8.1, Ruby 1.9.3, Rails 3.2.8) что-то странное начало появляться из воздуха (конечно...):
Сервер Rails рушится (все маршруты убиты, перезапуск сервера - единственный способ заставить его работать снова) со следующими записями журнала:
SystemStackError (stack level too deep):
actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:70
Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms)
Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms)
Я искал googled и обнаружил, что SystemStackError обычно связан с бесконечным циклом, но насколько я могу его проследить, у меня нет такого цикла в моем коде. И ошибка, похоже, не на определенном этапе логики приложения.
Единственная корреляция между сбоем сервера и моими действиями выглядит следующим образом:
- Измените код в приложении
- Обновить текущую веб-страницу приложения
- Бум, сервер ушел, сообщение об ошибке.
-
После этого страницы не работают, ошибка:
Ошибка маршрутизации
Нет совпадений маршрутов [GET] "/"
Попробуйте использовать маршруты рейка для получения дополнительной информации о доступных маршрутах.
Может ли кто-нибудь указать мне в правильном направлении, чтобы отладить это, пожалуйста?
PS: Я подозреваю, что это произошло после небрежного обновления пакета. Может ли это быть?
Ответы
Ответ 1
Отладка сообщения об ошибке stack level too deep
в rails app
непросто, поскольку ошибка может быть вызвана целым рядом причин, и сообщение об ошибке не слишком полезно.
Некоторые причины, приводящие к stack level too deep error
:
Если ошибка происходила при загрузке системы, этот совет был бы очень полезен: http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/
Из описания, похоже, что приложение работает нормально некоторое время, а затем начинает сбой - поэтому приведенный выше пример загрузки может не применяться.
Один из способов выяснить проблему - изолировать конкретный line/block of code
, вызывающий ошибку, с помощью отладки printf
Кроме того, может быть целесообразно отменить изменения и вернуть систему в рабочее состояние, а затем поменять изменения постепенно, чтобы изолировать основную причину.
Вполне вероятно, что bundle update
вызвал ошибку в этом случае; так что было бы неплохо проверить вновь добавленные зависимости и посмотреть, могут ли они быть виновниками.