2012-12-24 81 views
3

從延遲作業運行時,我收到了常規堆棧級別太深的錯誤。ruby​​ delayed_job - 堆棧級別太深

我得到這個類似的錯誤是很多延誤工作的地方,但是當我在它工作正常控制檯線路運行相同的代碼行....

Mon Dec 24 2012 01:21:39 stack level too deep 
Mon Dec 24 2012 01:21:39 /usr/lib/ruby/1.8/date/format.rb:157 
:in `emit'/usr/lib/ruby/1.8/date/format.rb:171 
:in `emit_w'/usr/lib/ruby/1.8/date/format.rb:176 
:in `emit_n'/usr/lib/ruby/1.8/date/format.rb:244 
:in `strftime'/usr/lib/ruby/1.8/date/format.rb:218 
:in `gsub'/usr/lib/ruby/1.8/date/format.rb:218 
:in `strftime'/usr/lib64/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date/conversions.rb:58 
:in `to_s'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/quoting.rb:61 
:in `quoted_date'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/quoting.rb:29 
:in `quote'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/mysql_adapter.rb:236 
:in `quote'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2392 
:in `quote_bound_value'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2352 
:in `replace_bind_variables'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2352 
:in `gsub'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2352 
:in `replace_bind_variables'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2320 
:in `sanitize_sql_hash_for_conditions'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2231 
:in `sanitize_sql'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1494 
:in `merge_conditions'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1492 
:in `each'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1492 
:in `merge_conditions'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1804 
:in `add_conditions!'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1687 
:in `construct_finder_sql'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1548 
:in `find_every'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1505 
:in `find_initial'/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:613 
:in `find'/home/myapp/apps/myapp/releases/20121130183323/app/models/api_call.rb:20 
:in `log'/home/myapp/apps/myapp/releases/20121130183323/lib/twitter_logger.rb:258 
:in `log_to_db'/home/myapp/apps/myapp/releases/20121130183323/lib/twitter_logger.rb:138 
:in `old_user_timeline'/home/myapp/apps/myapp/releases/20121130183323/lib/twitter_logger.rb:130 
:in `user_timeline'/home/myapp/apps/myapp/releases/20121130183323/lib/influencer_helper.rb:1349 
:in `safely_get_user_timeline'/home/myapp/apps/myapp/releases/20121130183323/lib/twitter_helper.rb:711 
:in `store_followers_tweets'/home/myapp/apps/myapp/releases/20121130183323/lib/delayed_store_follower_tweets.rb:30 
:in `perform'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:215 
:in `invoke_job'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:93 
:in `run_with_lock'/usr/lib/ruby/1.8/timeout.rb:67 
:in `timeout'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:93 
:in `run_with_lock'/usr/lib/ruby/1.8/benchmark.rb:308 
:in `realtime'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:92 
:in `run_with_lock'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:153 
:in `reserve_and_run_one_job'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:152 
:in `each'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:152 
:in `reserve_and_run_one_job'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:199 
:in `work_off'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:198 
:in `times'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb:198 
:in `work_off'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb:28 
:in `start'/usr/lib/ruby/1.8/benchmark.rb:308 
:in `realtime'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb:27 
:in `start'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb:24 
:in `loop'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb:24 
:in `start'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb:68 
:in `run'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb:46 
:in `daemonize'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/application.rb:249 
:in `call'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/application.rb:249 
:in `start_proc'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/daemonize.rb:197 
:in `call'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/daemonize.rb:197 
:in `call_as_daemon'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/application.rb:253 
:in `start_proc'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/application.rb:293 
:in `start'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/controller.rb:70 
:in `run'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons.rb:195 
:in `run_proc'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/cmdline.rb:109 
:in `call'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/cmdline.rb:109 
:in `catch_exceptions'/usr/lib64/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons.rb:194 
:in `run_proc'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb:45 
:in `daemonize'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb:43 
:in `times'/home/myapp/apps/myapp/releases/20121130183323/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb:43 
:in `daemonize'script/delayed_job:5 

的代碼是太多包括在這個論壇。

所以我的問題是明確的是:

1)研究後,我的懷疑,我只是沒有足夠的堆棧空間。我看到我可以使用ulimit,但我不知道如何得到這個ulimit延遲工作,我在我的shell(.bashrc)中提高了ulimit,但似乎沒有幫助。任何人都可以確認,我剛剛出棧空間,如何解決? (這裏是我的想法:http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror

2.)如果它不是ulimit,它可能是什麼,我怎麼能調試這....我沒有看到任何遞歸或循環在這個堆棧。

+0

什麼是在控制檯中正常運行的代碼行? – Confusion

+0

您要求我們從堆棧跟蹤中重新構建您的程序,並且在不向我們提供您正在使用的代碼摘要的情況下,我們無法提供幫助。 –

+0

我認爲這是一個完全合法的問題,而且很清楚,這裏不需要顯示代碼。這是不公平的,你們關閉它,我看到很多類似的問題沒有答案,這是一個非常有用的問題,關於如何rubys堆棧系統與ulimit工作。 – Joelio

回答

0

如果您有某種無限循環,增加堆棧空間將無法解決您的問題。

我有一個類似的堆棧級別過於深的問題,與delayed_job上週有關。事實證明,這是一個衆所周知的問題,在我的案例中涉及到心理寶石(用於YAML序列化)。當延遲作業將一個作業排隊時,它將給定的對象串行到YAML並將其存儲在數據庫中,那時我正在發生堆棧溢出。

您的問題可以有一個完全不同的根本原因(其無法從堆棧跟蹤告訴),但它可能是值得檢查https://github.com/collectiveidea/delayed_job/issues/349

對我來說,解決辦法是在註釋:https://github.com/collectiveidea/delayed_job/issues/349#issuecomment-5391754(即添加encode_with方法到正在被序列化的對象的類。)

+0

感謝史蒂夫,這就是爲什麼我包括堆棧,我不認爲我在這裏有一個無限循環,所以這是第一個我沒有看到這個循環的錯誤。希望瞭解更多關於ulimit和ruby stack ... – Joelio