Я пытаюсь использовать Sidekiq для запуска ниже заданного задания.Использование Sidekiq для активного задания и получение ActiveJob :: DeserializationError
Работа выполняется нормально, если не поставлена в очередь (выполняется_и_на), но сбой при вызове (perform_later), который использует Sidekiq.
AddEmployeesToRoomJob.perform_now room ## works fine
AddEmployeesToRoomJob.perform_later room ## breaks in Sidekiq
Ошибка:
AddEmployeesToRoomJob JID-da24b13f405b1ece1212bbd5 INFO: fail: 0.003 sec
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN: {"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped" :"AddEmployeesToRoomJob","queue":"default","args": [{"job_class":"AddEmployeesToRoomJob","job_id":"0ba5bd30-e281-49a7-a93f- 6e50445183ac","queue_name":"default","priority":null,"arguments": [{"_aj_globalid":"gid://dragonfly/Room/1"}],"locale":"en"}],"retry":true, "jid":"da24b13f405b1ece1212bbd5","created_at":1471704675.739077,"enqueued _at":1471705036.6406531,"error_message":"Error while trying to deserialize arguments: Couldn't find Room with 'id'=1","error_class":"ActiveJob::DeserializationError","failed_at":14717 04675.946183,"retry_count":4,"retried_at":1471705036.644416}
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN: ActiveJob::DeserializationError: Error while trying to deserialize arguments: Couldn't find Room with 'id'=1
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN: /Users/tamlyn/.rvm/gems/ruby-2.2.3/gems/activerecord- 5.0.0.1/lib/active_record/relation/finder_methods.rb:357:in `raise_record_not_found_exception!'
My Job класс AddEmployeesToRoomJob < ApplicationJob queue_as: По умолчанию
def perform(room)
employees = Employee.all
if employees.length > 0
employees.each do |employee|
UserRoom.create(user: employee, room: room)
end
end
end
end
Мои Мысли Я не понимаю, почему он не может найти комнату, в которую я перехожу в метод выполнения. Как будто это как-то теряет эту переменную в очереди/JSONifying задания?
Sidekiq документы говорят
«К сожалению, это означает, что если [номер] запись будет удалена после того, как работа будет помещён, но до того, как метод выполнения называется, обработка исключений отличается.»
Они предлагают обходной путь, но я не понимаю, как это помогло бы мне:
rescue_from ActiveJob::DeserializationError do |exception|
# handle a deleted user record
end
Заранее спасибо за любую помощь!
https://github.com/mperham/sidekiq/wiki/Проблемы и устранение неполадок # не могу найти-modelname-with-id12345 –