在使用延迟任务时,我经常遇到堆栈级别过深的错误。
在延迟任务中,我在很多地方都遇到了类似的错误,但是当我在控制台逐行运行相同的代码时,它可以正常工作...
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,那么可能是什么,我该如何调试这个问题......我在这个堆栈中没有看到任何递归或循环。