服务器运行时更​​改文件触发SystemStackError?

时间:2012-12-03 21:20:22

标签: ruby-on-rails macos error-handling ruby-on-rails-3.2

在我的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通常是由无限循环引起的,但据我可以追踪它,我的代码中没有这样的循环。并且错误似乎不在应用程序逻辑的某个步骤中。

服务器崩溃与我的操作之间的唯一关联如下:

  1. 更改应用中的一些代码
  2. 重新加载应用的当前网页
  3. 轰炸,服务器消失,错误消息。
  4. 此后没有页面可用,错误是:

    路由错误

    没有路线匹配[GET]“/”

    尝试运行佣金路线以获取有关可用路线的更多信息。

  5. 有人能指出我正确的方向进行调试吗? PS:我怀疑这是在一次粗心的“捆绑更新”之后发生的。这可以吗?

1 个答案:

答案 0 :(得分:2)

stack level too deep中调试rails app错误消息并不容易,因为错误可能是由于各种原因造成的,并且错误消息不太有用。

导致stack level too deep error的一些原因:

  1. 应用程序的gems & plugins and any other dependencies不一致。
  2. Code syntax error
  3. applying db migrations erroneously造成的不一致。
  4. 如果在系统启动时发生了错误,那么此提示非常有用:http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/

    从描述中看,应用程序看起来好一段时间,然后开始崩溃 - 所以上面的启动案例可能不适用。

    解决问题的一种方法是使用printf debugging

    隔离导致错误的特定line/block of code

    此外,可能值得回滚更改并使系统恢复工作状态,然后逐步放回更改以隔离根本原因。

    bundle update很可能在这种情况下触发了错误;因此,检查新添加的依赖项并查看它们是否是罪魁祸首是一个好主意。