Неопределенный метод Ошибка при создании работников 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 решил проблему для меня.
Возможно 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