После настройки sidekiq я заметил странное поведение в отношении аргументов, переданных в метод Sidekiq::Client.push
.
Если я передам self.class
в качестве аргументов, то я либо получу SystemStackError (stack level too deep)
ИЛИ сервер просто повесит трубку, после чего не примет никаких запросов.
Sidekiq::Client.enqueue(ActivityWorker, self.id, self.class)
SystemStackError (stack level too deep):
actionpack (3.2.12) lib/action_dispatch/middleware/reloader.rb:70
Rendered /usr/local/rvm/gems/ruby-1.9.3-p194@restro/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
Rendered /usr/local/rvm/gems/ruby-1.9.3-p194@restro/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.0ms)
Rendered /usr/local/rvm/gems/ruby-1.9.3-p194@restro/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (37.8ms)
Но если я даю self.class.name
, то он работает без каких-либо изъянов. Sidekiq::Client.enqueue(ActivityWorker, self.id, self.class.name)
Я обнаружил, что аргументы сериализуются до того, как они передаются рабочему процессу, но я не могу понять этот сценарий.
Вот мой рабочий класс
class ActivityWorker
include Sidekiq::Worker
sidekiq_options queue: 'high', retry: false
def perform(res_id, res_class)
# do some activity
end
end