docs/7.0-API-Migration.md
Sidekiq 7.0 has some significant API refactoring, meaning an upgrade can be harder than usual for people who are touching Sidekiq's APIs in their initializer.
# broken, logger is no longer a top-level attribute
Sidekiq.logger = ...
# fixed
Sidekiq.configure_server do |cfg|
cfg.logger = ...
end
Custom log formatter is a part of new logger API
# broken
Sidekiq.configure_server do |cfg|
cfg.log_formatter = ...
end
# fixed
Sidekiq.configure_server do |cfg|
cfg.logger.formatter = ...
end
Sidekiq no longer allows raw ConnectionPools as people were often undersizing the pool leading to terrible performance. This way Sidekiq will automatically tune the size based on concurrency settings. Pools are lazy-loaded so they do not create connections until the system actually needs them.
# broken, can't pass connection pools directly anymore
POOL1 = ConnectionPool.new(size: 5) { Redis.new(ENV['MY_REDIS_URL']) }
Sidekiq.configure_server do |cfg|
cfg.redis = POOL1
end
# fixed
Sidekiq.configure_server do |cfg|
cfg.redis = { url: ENV['MY_REDIS_URL'] }
end
Due to Sidekiq's use of the new redis-client gem for connections, the configuration for it has changed. More details - https://github.com/redis-rb/redis-client#sentinel-support
# broken - missing name keyword argument
Sidekiq.configure_server do |cfg|
cfg.redis = {
url: "redis://myredis/0",
sentinels: [
{host: "host1", port: 26379},
{host: "host2", port: 26379},
{host: "host3", port: 26379}
]
}
end
# fixed - don't forget to fix connection settings for both client and server
Sidekiq.configure_server do |cfg|
cfg.redis = {
url: "redis://myredis/0",
name: "primary",
sentinels: [
{host: "host1", port: 26379},
{host: "host2", port: 26379},
{host: "host3", port: 26379}
]
}
end
Sidekiq.configure_server do |cfg|
cfg[:average_scheduled_poll_interval] = 5
end
# broken, can not read configuration directly anymore
Sidekiq[:average_scheduled_poll_interval] # NoMethodError: undefined method '[]' for Sidekiq:Module
# fixed
Sidekiq.default_configuration[:average_scheduled_poll_interval] # 5
Delayed Extensions were disabled in Sidekiq 5 and removed in Sidekiq 7.
If you were still using them by explicitly enabling:
Sidekiq::DelayExtensions.enable_delay!
This will no longer work. Either migrate code to use Sidekiq::Job or use the 3rd party gem sidekiq-delay_extensions
Have more APIs which need a migration tip? Edit this file and open a PR!