I currently use delayed job to process jobs asynchronously. Instead of creating workers, I use the .delay
method a lot.
I want to move to Sidekiq, but I
For Sidekiq 2.17.1 and later, somewhere in the Rails initializers, call the following:
Sidekiq.hook_rails!
Sidekiq.remove_delay!
and you will have only prefixed sidekiq_delay
methods and so on.
(official document)
For older versions of Sidekiq:
Put the following in config/initializers/sidekiq.rb
module Sidekiq::Extensions::Klass
alias :sidekiq_delay :delay
remove_method :delay
alias :sidekiq_delay_for :delay_for
remove_method :delay_for
alias :sidekiq_delay_until :delay_until
remove_method :delay_until
end
module Sidekiq::Extensions::ActiveRecord
alias :sidekiq_delay :delay
remove_method :delay
alias :sidekiq_delay_for :delay_for
remove_method :delay_for
alias :sidekiq_delay_until :delay_until
remove_method :delay_until
end
module Sidekiq::Extensions::ActionMailer
alias :sidekiq_delay :delay
remove_method :delay
alias :sidekiq_delay_for :delay_for
remove_method :delay_for
alias :sidekiq_delay_until :delay_until
remove_method :delay_until
end
And then you can use sidekiq_delay
to queue in Sidekiq, and call delay
to queue in Delayed Job.
For anyone searching for this. I did find Sidekiq now has a setting for this out of the box. All you
need to do is add Sidekiq.remove_delay!
to config/initializers/sidekiq.rb
This is described here: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions
It seems that Sidekiq has mix-in that adds .delay
methods to all classes. Not 100% sure how this will behave but it could result in problems if delay
you are refering to is on the instance level.
My advice would be to add sidekiq
library per job until you have moved all you jobs to it. Meaning to avoid including both libraries at the same time, again if possible.