在我的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/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
Rendered /Users/dekay/.rvm/gems/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms)
Rendered /Users/dekay/.rvm/gems/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms)
我已经google了,发现SystemStackError通常是由无限循环引起的,但据我可以追踪它,我的代码中没有这样的循环。并且错误似乎不在应用程序逻辑的某个步骤中。
服务器崩溃与我的操作之间的唯一关联如下:
此后没有页面可用,错误是:
路由错误
没有路线匹配[GET]“/”
尝试运行佣金路线以获取有关可用路线的更多信息。
有人能指出我正确的方向进行调试吗? PS:我怀疑这是在一次粗心的“捆绑更新”之后发生的。这可以吗?
答案 0 :(得分:2)
在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/
从描述中看,应用程序看起来好一段时间,然后开始崩溃 - 所以上面的启动案例可能不适用。
解决问题的一种方法是使用printf debugging
隔离导致错误的特定line/block of code
此外,可能值得回滚更改并使系统恢复工作状态,然后逐步放回更改以隔离根本原因。
bundle update
很可能在这种情况下触发了错误;因此,检查新添加的依赖项并查看它们是否是罪魁祸首是一个好主意。