Skip to Content Skip to Search

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

Instance Public methods

perform(broadcast_id)

# 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