Почему метод handle_asynchronously для delayed_job выдвигает коллекцию модели, а не delayed_backend_mongoid_jobs? - PullRequest
2 голосов
/ 15 декабря 2011

Попытка заставить delayed_job работать с монгоидным бэкэндом. Созданное задание не запускается, по-видимому, потому, что оно отправляется в коллекцию db.entries, а не в коллекцию db.delayed_backend_mongoid_jobs.

Учитывая следующий код в классе Entry:

after_create :create_dj
def create_dj
  Rails.logger.info "ENTRY CREATED at #{created_at}"
end
handle_asynchronously :create_dj, run_at: Proc.new { 30.seconds.from_now }

Я ожидаю, что в коллекции delayed_backend_mongoid_jobs будет создана новая запись delayed_job. Вместо этого я вижу следующий журнал базы данных:

MONGODB health_blog_development['entries'].insert([
  {"content"=>"foo", "_id"=>BSON::ObjectId('4ee95ed3b643988551000044') ... }, 
  {"priority"=>0, "attempts"=>0, "handler"=>"--- !ruby/struct:Delayed::PerformableMethod ... }])

, как будто он думает, что должен отправить задание в коллекцию записей.

Некоторые детали, которые могут иметь отношение:

  • Запись была разделена на подклассы. Я пробовал код в Entry и его подклассе, TextEntry.
  • Функция запускает find, когда handle_asynchronously не используется.
  • Запись не является встроенным классом, но имеет несколько ссылочных отношений.
  • Я установил config.mongoid.preload_models = true
  • Я подтвердил, что delayed_job работает должным образом, когда я использую его с новой моделью в том же проекте.

Используемые драгоценные камни:

  • монгоид (2.2.4)
  • рельсы (3.0.9)
  • delayed_job (2.1.4)
  • delayed_job_mongoid (1.0.4)

Пожалуйста, дайте мне знать, если есть какие-либо другие детали, которые могут помочь выяснить, что здесь происходит. Ура!

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Это странное поведение в результате комбинации delayed_job и структуры виджета Apotomo.Решение проблемы с использованием обычных форм Rails вместо процесса Apotomo url_for_event решает проблему.

0 голосов
/ 16 декабря 2011

Я думаю, что записи в коллекции delayed_job ссылаются на класс, который их создает, в данном случае это класс Entry.

Какую ошибку вы фактически получаете?

...