Dmy*_*iak 8 ruby activerecord ruby-on-rails activesupport stack-trace
我正在SystemStackError使用Rails 3应用程序.
我拥有的所有信息都是无用的一行堆栈跟踪(取自日志):
SystemStackError (stack level too deep):
activesupport (3.2.3) lib/active_support/callbacks.rb:409
Run Code Online (Sandbox Code Playgroud)
所以问题是我如何看到完整的堆栈跟踪?
注意:我不关心为什么会发生这种情况,我只想知道它发生的地方.
使用:Rails 3.2.3,Unicorn.
谢谢.
如果你在before_save或after_save中更新一个活动记录,它将继续循环....此外,如果你在一个关联的两端都有validates_associated.
以下是before_save回调如何创建循环的示例:
class Foo < ActiveRecord::Base
def before_save
self.update_attribute(:bar, 'badidea')
end
end
Run Code Online (Sandbox Code Playgroud)
lib/active_support/callbacks.rb 中的代码相当复杂,但准确地说,它看起来正在应用各种回调::before、:after、:around。
您可以尝试在第 426 行之前放置一个老式的“puts before #{name}”,然后看看会得到什么。
同样,整个堆栈跟踪可能位于 Rails 堆栈内部,并且它被默认的 backtrace_filter 过滤掉。将 backtrace_filter 关闭可能会让您看到堆栈并获得调试线索。请参阅 config/initializers/backtrace_silencers.rb 并取消注释:
Rails.backtrace_cleaner.remove_silencers!
| 归档时间: |
|
| 查看次数: |
3102 次 |
| 最近记录: |