Неопределенный метод Ошибка при создании работников delayed_job с помощью script / delay_job - PullRequest
2 голосов
/ 20 июля 2011

Возникли проблемы с запуском нескольких рабочих.

При создании рабочих с rake jobs:work заданиями, которые запускаются без проблем, даже при многократном вызове, но при создании рабочих с ruby script/delayed_job -n 5 start all задания не работают сundefined метод на Syck::DomainType.

Я искал довольно много, но не могу найти решение для этого.Я запускаю DelayedJob на Mongoid бэкэнд.Версии драгоценных камней:

  • рейк 0.9.2
  • рельсы 3.0.6
  • delayedjob 2.1.4
  • delayedjob_mongoid 1.0.2

Кто-нибудь сталкивался с подобной ошибкой / есть решение?Или, если не считать, некоторую информацию о том, почему / как рабочие создаются по-разному, в зависимости от того, каким образом их вызывают?

Ответы [ 4 ]

1 голос
/ 25 августа 2011

У меня была точно такая же проблема.Я мог воспроизвести его, загрузив задание в консоль и попытавшись десериализовать его:

$ rails console production
> j = Delayed::Job.last
> YAML.load(j.handler)

В моей производственной среде я получил объект Syck :: DomainType, тогда как в процессе разработки он просто не сериализовал мой объект (данныев обоих случаях в одной и той же базе данных хранится одно и то же).

Короче говоря, я понял, что у меня на сервере стоит ruby ​​1.9.1 вместо 1.9.2.Переход на управляемую среду rvm с ruby-1.9.2p290 решил проблему для меня.

0 голосов
/ 03 апреля 2012

Запустите его с:

bundle exec ./script/delayed_job -n 5 start
0 голосов
/ 27 июля 2011

Похоже, что проблема возникла из-за того, что bundler> = 1.0.10 загружает psy и перезаписывает некоторые функции sycks, если присутствует libyaml.Мне удалось удалить установку libyaml из моей системы, что, как я знаю, будет невозможно для всех.Трудно отследить, надеюсь, этот пост поможет кому-то еще

0 голосов
/ 21 июля 2011

Возможно, ruby script/delayed_job -n 5 start all не вызывает Bundler.setup, и поэтому он отличается от других способов запуска рабочих?(Только предположение)

Вы можете исправить ошибку Syck::DomainType, поместив ее в верхнюю часть config/application.rb

require 'yaml'
YAML::ENGINE.yamler = 'syck'
# [...]
require File.expand_path('../boot', __FILE__)

Благодаря этому ответу: railsошибка, не удалось разобрать YAML

...