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

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

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

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

  • грабли 0.9.2
  • рельсы 3.0.6
  • Задержка 2.1.4
  • delayedjob_mongoid 1.0.2

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

4 ответа

Решение

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

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

$ 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 решил проблему для меня.

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

bundle exec ./script/delayed_job -n 5 start

Возможно 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__)

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

Другие вопросы по тегам