【发布时间】:2011-12-06 19:29:52
【问题描述】:
我在 Heroku Bamboo MRI (Ruby) 1.9.2 上的 Rails 3.0.9 上运行 Spree 0-60-stable
在 2011 年 12 月 3 日星期六或前后的某个时间,我开始在控制器中收到“SystemStackError(堆栈级别太深)”消息,这些消息之前没有引发该错误。自 11 月 28 日以来,我没有重新编译过 slug。我首先尝试重新启动我的网络进程,但无济于事。从那以后,我做了一个名义上的更改(我的 Gemfile 中的一行空白),所以我可以重新编译并推动它。不用找了。我仍然收到错误消息。我查看了我可能迁移到的可用堆栈,但除了我在竹 mri-1.9.2 上的堆栈之外,没有其他堆栈明确支持我的应用正在使用的 ruby 版本。
错误(根据 Heroku 支持)是:
ActionView::Template::Error(堆栈级别太深)
他们接着说,“这意味着您的模板中有一些东西正在进行可能的递归调用。虽然缺少代码更改可能表明我们有一些奇怪的行为,但也有可能发生了一些变化在您的数据库中,或者某些基于时间的东西会导致行为发生变化。在任何一种情况下,完整的堆栈跟踪都会有所帮助。您是否使用 Airbrake 或 Exceptional 来捕获此错误并确定来源?”
我已经添加了 Airbrake (Hoptoad) 和 Exceptional 来检查它们在堆栈跟踪方面可能显示的内容。两者都提供相同的文件/行参考,但没有更多信息:
.bundle/gems/ruby/1.9.1/gems/actionpack-3.0.9/lib/action_controller/metal/rescue.rb:19
这似乎不是很有帮助,因为它是救援本身,而不是实际触发它的任何代码行,我只有最外层的上下文。我在几个地方看到了同样的错误:
- 管理/装运#edit
- http://www.example.com/admin/orders/R123456789/shipments/H12345678909/edit
- .bundle/gems/ruby/1.9.1/gems/actionpack-3.0.9/lib/action_controller/metal/rescue.rb:19
- 结帐#edit
- http://www.example.com/checkout/delivery
- .bundle/gems/ruby/1.9.1/gems/arel-2.0.10/lib/arel/table.rb:44
- 结帐#edit
- http://www.example.com/checkout/delivery
- .bundle/gems/ruby/1.9.1/gems/arel-2.0.10/lib/arel/visitors/to_sql.rb:305
- 结帐#update
- http://www.example.com/checkout/update/address
- .bundle/gems/ruby/1.9.1/gems/actionpack-3.0.9/lib/action_controller/metal/rescue.rb:19
总结一下我的问题:
- 我没有更改我的代码,并且问题“突然出现”。
- 如果是数据更改,例如管理员中的设置,是什么?
- 由于缺少完整的堆栈跟踪,故障排除变得困难。
最后,我的问题:
如果没有完整的堆栈跟踪,是否可以识别“SystemStackError:堆栈级别太深”的起源?
非常感谢您的任何帮助。
【问题讨论】:
标签: ruby-on-rails-3 heroku stack-trace spree