Ruby on rails 4 如何调试SystemStackError:堆栈级别太深

Ruby on rails 4 如何调试SystemStackError:堆栈级别太深,ruby-on-rails-4,mongoid,Ruby On Rails 4,Mongoid,我不知道发生了什么事 发送展示奖品请求后 我得到了预期的结果,也得到了错误异常 Rails服务器无法再接受请求 我完全不知道发生了什么事 看法 控制器 您的最佳选择是启用某种低级Ruby调用日志记录,类似于: $call_log_enabled = false $call_log = open('call_log.txt', 'w') set_trace_func proc { |event, file, line, id, binding, classname| if event ==

我不知道发生了什么事

发送展示奖品请求后

我得到了预期的结果,也得到了错误异常

Rails服务器无法再接受请求

我完全不知道发生了什么事

看法 控制器
您的最佳选择是启用某种低级Ruby调用日志记录,类似于:

$call_log_enabled = false
$call_log = open('call_log.txt', 'w')

set_trace_func proc { |event, file, line, id, binding, classname|
  if event == 'call' && $call_log_enabled
    $call_log.puts "#{file}:#{line} #{classname}##{id}"
  end
}
然后,每当需要打开跟踪时,只需修改全局变量:

$call_log_enabled = true
此外,如果您在Rails应用程序中突然遇到SystemStackError,并且正在使用
alias\u method\u chain
,则在开发模式下重新加载类可能会导致此错误。在这种情况下,您可以用

Rails.application.config.to_prepare do
   ...
end
to_prepare块中的代码不会在每个开发请求上运行

$call_log_enabled = false
$call_log = open('call_log.txt', 'w')

set_trace_func proc { |event, file, line, id, binding, classname|
  if event == 'call' && $call_log_enabled
    $call_log.puts "#{file}:#{line} #{classname}##{id}"
  end
}
$call_log_enabled = true
Rails.application.config.to_prepare do
   ...
end