Delayed_job возвращает «синтаксическую ошибку» для демона процесса и задачи rake - PullRequest
2 голосов
/ 21 марта 2011

Сегодня во второй половине дня возникла проблема с процессом 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 с ошибками, и задача 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

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Я столкнулся с подобной проблемой пару месяцев назад, когда мой след стека выплеснулся:

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 включены специальные символы. Вы также можете попробовать это и посмотреть, поможет ли это.В любом случае, извините, это немного расплывчато, надеюсь, это поможет.

0 голосов
/ 22 марта 2011

Проблема возникла из-за полезной нагрузки, которую YAML не смог проанализировать - cred + для 2potatocakes за ближайший ответ.

Загрузка IRb и проверка заданий по методу payload_object покажет вам, какое задание YAML захлестнет, уничтожит задание, и задача rake будет работать нормально.

...