【问题标题】:Delayed_job returns "syntax error" for process daemon and rake taskDelayed_job 为进程守护进程和 rake 任务返回“语法错误”
【发布时间】:2011-07-20 00:14:55
【问题描述】:

今天下午开始出现delayed_job进程的问题,发现守护进程死掉了,重新启动...

大约 40 分钟后,该进程再次终止 @ 86 个工作。尝试再次启动守护程序,发现它们在我启动它们后立即悄然死亡。检查我发现的日志:

s603021@ec2-184-72-244-232:~/rails/gamestreamer/current$ tail -F log/delayed_job.log 
  SQL (0.7ms)   SET NAMES 'utf8'
  SQL (0.8ms)   SET SQL_AUTO_IS_NULL=0
*** Starting job worker delayed_job.4 host:ec2-184-72-244-232.compute-1.amazonaws.com pid:17397
  Delayed::Job Columns (1.5ms)   SHOW FIELDS FROM `delayed_jobs`
  Product Columns (1.5ms)   SHOW FIELDS FROM `products`
  Game Columns (2.4ms)   SHOW FIELDS FROM `games`
  Delayed::Job Update (12.8ms)   UPDATE `delayed_jobs` SET locked_by = null, locked_at = null WHERE (locked_by = 'delayed_job.4 host:ec2-184-72-244-232.compute-1.amazonaws.com pid:17397') 
#<ArgumentError: syntax error on line 1588, col 10: `'>

我继续进行了一些挖掘,很多人曾经发现delayed_jobs的守护进程gem被bug了,而rake任务仍然有效;然而,这对我来说不是这样:

s603021@ec2-184-72-244-232:~/rails/gamestreamer/current$ RAILS_ENV=gs1_development rake jobs:work --trace
(in /data01/home/s603021/rails/gamestreamer/releases/20110302193304)
** Invoke jobs:work (first_time)
** Invoke merb_env (first_time)
** Execute merb_env
** Invoke environment (first_time)
** Execute environment
** Execute jobs:work
*** Starting job worker host:ec2-184-72-244-232.compute-1.amazonaws.com pid:17082
rake aborted!
syntax error on line 1588, col 10: `'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/yaml.rb:133:in `load'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/yaml.rb:133:in `load'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:234:in `deserialize'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:50:in `payload_object'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:55:in `name'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:90:in `run_with_lock'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:159:in `reserve_and_run_one_job'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:158:in `each'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:158:in `reserve_and_run_one_job'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:205:in `work_off'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:204:in `times'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/job.rb:204:in `work_off'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/worker.rb:30:in `start'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/worker.rb:29:in `start'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/worker.rb:26:in `loop'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/worker.rb:26:in `start'
/data01/home/s603021/rails/gamestreamer/releases/20110302193304/vendor/plugins/delayed_job/lib/delayed/tasks.rb:13
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19

现在我只是不确定可能是什么问题,任何关于如何获取更多信息(或更详细的例外)的建议都会很棒。如果有人可以帮助我解决它,那将是令人难以置信的。提前致谢--

Job.rb 文件:http://pastie.org/1697465

【问题讨论】:

  • 是的,调试很麻烦。这是什么syntax error on line 1588, col 10:?如果您知道该文件是什么,您可以发布该文件吗?
  • 不,这很冗长;我的假设是它引用了延迟作业解析的 yaml 数据,但是;老实说,这只是猜测。
  • 所有日志和标准输出都发送到 RAILS_ROOT/log/delayed_job.log
  • 上面的第一个 [code] 块是 /log/delayed_job.log 的输出——仍然只是“ArgumentError”问题,没有明确指示文件包含语法错误
  • 你能发布你的 job.rb 文件吗?

标签: ruby-on-rails ruby exception exception-handling delayed-job


【解决方案1】:

几个月前我遇到了类似的问题,我的堆栈跟踪吐出:

2011-02-02 20:19:42 INFO -- Processing request 342 for service document_upload, worker 1
2011-02-02 20:19:44 FATAL -- ArgumentError (syntax error on line 29, col -1: `'):
    /usr/lib/ruby/1.8/yaml.rb:133:in `load'
    /usr/lib/ruby/1.8/yaml.rb:133:in `load'
    /var/local/hprime/lib/puck_seed_file.rb:179:in `get_seed'
    /var/local/hprime/lib/puck_seed_file.rb:7:in `read'

我花了很长时间才找到导致它的原因,因为它非常断断续续,但事实证明这是正在处理的实际作业中的语法问题。不确定你到底在做什么,但你可以从那里开始......?

另外,在尝试解决我的问题时,我遇到了一些人,他们通过将 yaml 中的解析引擎添加到他们的 config/boot.rb 来解决类似问题

require 'yaml'
YAML::ENGINE.yamler= 'syck'

如果 yaml 内容中包含特殊字符,则默认解析器显然会吐出虚拟字符。您也可以尝试一下,看看是否有帮助。无论如何,抱歉有点含糊,希望对您有所帮助。

【讨论】:

    【解决方案2】:

    问题归结为 YAML 无法解析的作业负载 - cred+ 到 2potatocakes 以获得最接近的答案。

    加载 IRb 并根据 payload_object 方法检查作业将显示 YAML 正在阻塞的作业,销毁作业并且 rake 任务将正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-29
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2023-03-19
      • 2023-03-02
      • 1970-01-01
      相关资源
      最近更新 更多