2014-08-31 4 views
3

У меня возникла большая проблема. Мое приложение выполняет несколько тысяч SQL-запросов, а затем неожиданно возникает эта ошибка. Это не имеет значения, если я выполняю свой код с помощью команды rake или консоли rails напрямую.SystemStackError: уровень стека слишком глубокий - sql.active_record?

Кто-нибудь знает, что это значит? Никогда не видел эту ошибку по отношению к рельсовому логгеру.

ENV:
рубинового 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>'" 
] 
+0

что-то в особенности происходит, когда это началось? вы проверили, что в вашем коде нет бесконечной рекурсии? посмотрите на это http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror – dabadaba

+0

thnx за ссылку, я сейчас пытаюсь выполнить команду ulimit – ghostrifle

+0

.. мой размер стека был 8192 огромный .., но даже после его увеличения через «ulimit -s 16384» не помогает. та же ошибка, и все еще 23 вызывающих абонента – ghostrifle

ответ

0

Не могли бы вы показать код, который вызывает эту проблему. По моему мнению, вы сохраняете стек, в который вы добавляете данные из базы данных, но, возможно, вы не инициализируете его до []. Поэтому каждый раз, когда вы запускаете свой код, данные накапливаются и в конечном итоге вызывают эту проблему.

+1

Может быть, вы создаете бесконечный цикл, например, если вы вызываете update_attributes внутри before_update, он создаст бесконечный цикл, и одна и та же ошибка будет «слишком сложна». Вы можете понять это. Просмотрите свой код. – abhsss96