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 вызвал ошибку в этом случае; так что было бы неплохо проверить вновь добавленные зависимости и посмотреть, могут ли они быть виновниками.