我在 Heroku Bamboo MRI (Ruby) 1.9.2 上的 Rails 3.0.9 上运行 Spree 0-60-stable
2011 年 12 月 3 日星期六或前后的某个时间,我开始在控制器中收到“SystemStackError(堆栈级别太深)”消息,这些消息之前没有引发该错误。自 11 月 28 日以来,我没有重新编译过 slug。我首先尝试重新启动我的网络进程,但无济于事。从那以后,我做了一个名义上的更改(我的 Gemfile 中的一行空格),所以我可以重新编译并推动它。不用找了。我仍然收到错误消息。我查看了我可能迁移到的可用堆栈,但除了我在竹核磁共振 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
- 结帐#编辑
- http://www.example.com/checkout/delivery
- .bundle/gems/ruby/1.9.1/gems/arel-2.0.10/lib/arel/table.rb:44
- 结帐#编辑
- http://www.example.com/checkout/delivery
- .bundle/gems/ruby/1.9.1/gems/arel-2.0.10/lib/arel/visitors/to_sql.rb:305
- 结帐#更新
- 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:堆栈级别太深”的起源吗?
非常感谢您的任何帮助。