We are using Sidekiq::Job directly instead of an ActiveJob because the latter doesn’t play well with Sidekiq::Batch API. github.com/sidekiq/sidekiq/wiki/Batches#notes github.com/sidekiq/sidekiq/issues/4637 We use Sidekiq::Client.push_bulk in order to enqueue all jobs in one call to redis.
Methods
- P
Included Modules
- Sidekiq::Job
Instance Public methods
perform(broadcast_id) Link
Source: show
# File app/jobs/broadcasts/email_batch_job.rb, line 12 def perform(broadcast_id) broadcast = Broadcast.find(broadcast_id) total_pages = broadcast.eligible_recipients .page(1) .per(Broadcast.batch_size) .total_pages batch = Sidekiq::Batch.new batch.description = "Email Broadcast #{broadcast_id}" params = (1..total_pages).to_a.map { |page| [broadcast_id, page] } batch.jobs do Sidekiq::Client.push_bulk("class" => EmailSliceJob, "args" => params) end end