3

从延迟作业运行时,我经常遇到堆栈级别太深的错误。

我得到这个类似的错误是延迟工作的很多地方,但是当我在控制台中逐行运行相同的代码时,它工作正常......

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,它可能是什么,我该如何调试它......我在这个堆栈中看不到任何递归或循环。

4

1 回答 1

0

如果您有某种无限循环,增加堆栈空间不会解决您的问题。

上周我遇到了一个与 delay_job 相关的类似堆栈级别太深的问题。事实证明,这是一个已知问题,在我的案例中与 psych gem(用于 YAML 序列化)有关。当延迟作业将作业排队时,它会将给定对象序列化为 YAML 并将其存储在数据库中,此时我遇到了堆栈溢出。

您的问题可能有完全不同的根本原因(无法从堆栈跟踪中分辨出来),但可能值得一试https://github.com/collectiveidea/delayed_job/issues/349

对我来说,解决方案在评论中:https ://github.com/collectiveidea/delayed_job/issues/349#issuecomment-5391754 (即将encode_with方法添加到正在序列化的对象的类中。)

于 2012-12-24T17:05:33.867 回答