sidekiq-defer
The Sidekiq delay extensions were removed in Sidekiq 7.x. This gem restores them for apps still relying on the delay/delay_for/delay_until pattern.
Each target class gets its own namespaced worker (e.g. MyModel::DeferredJob, UserMailer::DeferredJob), so jobs appear clearly in Sidekiq metrics instead of a generic wrapper class name.
Requirements
- Redis: 6.2+
- Ruby: MRI 3.2+
- Sidekiq 7.0+
Installation
gem 'sidekiq-defer'
In your initializer:
Sidekiq::Delay.enable_delay!
Pass limit_payload_size: true (or a byte count) to log warnings on large YAML payloads:
Sidekiq::Delay.enable_delay!(limit_payload_size: 8_192)
Upgrading from Sidekiq's built-in extensions (IMPORTANT)
Jobs already in Redis were serialized with the old class names. Add these aliases so they can still be processed:
Sidekiq::Extensions::DelayedClass = Sidekiq::Defer::DelayedClass
Sidekiq::Extensions::DelayedModel = Sidekiq::Defer::DelayedModel
Sidekiq::Extensions::DelayedMailer = Sidekiq::Defer::DelayedMailer
Upgrading from sidekiq-delay_extensions
Sidekiq::DelayExtensions and Sidekiq::Delay are aliased to Sidekiq::Defer — existing code continues to work without changes.
Testing
require 'sidekiq/defer/testing'
This hooks DelayedMailer and DelayedModel into Sidekiq's fake/inline testing modes.
Contributing
Please open issues or pull requests at https://github.com/moskvin/sidekiq-delay_extensions.
License
Please see LICENSE for licensing details.
Original Author
Mike Perham, @getajobmike / @sidekiq, https://www.mikeperham.com / https://www.contribsys.com