【问题标题】:SystemStackError: stack level too deep - sql.active_record?SystemStackError:堆栈级别太深 - sql.active_record?
【发布时间】:2014-10-25 03:27:24
【问题描述】:

我遇到了一个真正的大问题。我的应用程序正在执行数千个 SQL 查询,然后突然发生此错误。如果我直接通过 rake 任务或 rails 控制台执行我的代码,这并没有什么区别。

有人知道这是什么意思吗?从未见过与 rails 记录器相关的此错误。

环境:
ruby-2.1.2
postgres 9.3
轨道 4.1.5

Could not log "sql.active_record" event. SystemStackError: stack level too deep ["/Users  /ghostrifle/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/tagged_logging.rb:46"]
SystemStackError: stack level too deep
from /Users/ghostrifle/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/irb/workspace.rb:86
Maybe IRB bug!

在 23 个调用者之后引发异常。

这是对 SystemStackError 异常的检查

[
  "/Users/ghostrifle/Entwicklung/xxx_main/lib/tasks/tree_spot.rake:42:in `block (2 levels) in <top (required)>'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'",
  "/Users/ghostrifle/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/bin/rake:23:in `load'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/bin/rake:23:in `<main>'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'",
  "/Users/ghostrifle/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'"
]

【问题讨论】:

  • 当这种情况开始发生时有什么特别的事情发生吗?您是否检查过代码中没有无限递归?看看这个dalibornasevic.com/posts/…
  • thnx 链接,我现在正在尝试 ulimit 命令
  • 好吧.. 我的堆栈大小是 8192 巨大.. 但即使通过“ulimit -s 16384”增加它也无济于事。同样的错误,仍然有 23 个调用者
  • 除了检查您的代码并寻找可能的无限递归循环之外,我想不出另一种解决方案。您究竟是什么时候收到此错误的?

标签: ruby-on-rails ruby activerecord


【解决方案1】:

能否请您显示导致此问题的代码。据我了解,您正在保留一个堆栈,您正在向其中添加从数据库中获取的数据,但也许您没有将其初始化为[]。因此,每次运行代码时,数据都会堆积起来,最终导致此问题。

【讨论】:

  • 可能是你制造了一些无限循环,例如如果你在 before_update 中调用 update_attributes 它将创建一个无限循环并且会抛出同样的错误 'stack level too deep' 。你可以弄清楚。检查您的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2013-10-05
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多