10

在我的 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)

我用谷歌搜索发现 SystemStackError 通常是由于无限循环造成的,但据我所知,我的代码中没有这样的循环。并且错误似乎不在应用程序逻辑的某个步骤中。

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

  1. 更改应用程序中的一些代码
  2. 重新加载应用程序的当前网页
  3. 繁荣,服务器不见了,错误消息。
  4. 在此之后没有页面工作,错误是:

    路由错误

    没有路线匹配 [GET] "/"

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

任何人都可以指出我调试这个的正确方向吗?PS:我怀疑它发生在粗心的“捆绑更新”之后。这可以吗?

4

1 回答 1

2

调试 astack level too deep中的错误消息rails app并不容易,因为错误可能是由多种原因造成的,并且错误消息并没有太大帮助。

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

  1. 宝石和插件以及应用程序的任何其他依赖项中的不一致。
  2. 代码语法错误
  3. 错误地应用数据库迁移导致的不一致。

如果错误发生在系统启动时,那么这个提示将非常有用:http ://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-德/

根据描述,该应用程序似乎可以正常运行一段时间,然后开始崩溃 - 因此上述启动情况可能不适用。

解决问题的一种方法是通过使用printf 调试来隔离line/block of code导致错误的具体原因

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

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

于 2012-12-24T05:06:18.947 回答