在我的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通常是由于一个无休止的循环,但是就我可以追踪它,我的代码中没有这样的循环.并且错误似乎不在应用程序逻辑的某个步骤中.
服务器崩溃与我的动作之间唯一的相关性如下:
>更改应用程序中的一些代码
>重新加载应用程序的当前网页
> Boom,服务器不见了,错误信息.
>此后没有页面工作,错误是:
路由错误
没有路线匹配[GET]“/”
尝试运行耙子路线以获取有关可用路线的更多信息.
任何人都可以指出正确的方向来调试这个吗?
PS:我怀疑它发生在粗心的“捆绑更新”之后.这可以吗
解决方法
在rails应用程序中调试堆栈级别太深的错误消息并不容易,因为错误可能是由于各种原因,并且错误消息不是太有帮助.
导致堆栈级别太大的一些原因错误:
> gems & plugins and any other dependencies应用不一致.
> Code syntax error
> applying db migrations erroneously造成的不一致.
如果在系统启动时发生错误,那么这个提示将是非常有用的:http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/
从描述中,它看起来像应用程序工作正常一段时间,然后开始崩溃 – 所以以上启动案例可能不适用.
解决问题的一个方法是使用printf debugging隔离引起错误的特定代码行/块代码
此外,可能有必要回滚更改并使系统恢复到工作状态,然后逐步放回更改以隔离根本原因.