0% found this document useful (0 votes)
66 views15 pages

Active Job in Rails

This guide provides you with all you need to get started creating, enqueuing, and executing background jobs.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
66 views15 pages

Active Job in Rails

This guide provides you with all you need to get started creating, enqueuing, and executing background jobs.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 15

Active jobs basics

Purpose
Creating a job
rails generate job guests_cleanup --queue urgent
Usage
GuestsCleanupJob.perform_later guest

GuestsCleanupJob.set(wait_until:Date.tomorrow.noon).perform_later(
guest)

GuestsCleanupJob.set(wait: 1.week).perform_later(guest)
Queues
class GuestsCleanupJob < ApplicationJob
queue_as :users
#....
end

MyJob.set(queue: :another_queue).perform_later(record)
Callbacks
● before_enqueue
● around_enqueue
● after_enqueue
● before_perform
● around_perform
● after_perform
class GuestsCleanupJob < ApplicationJob
around_perform :around_cleanup

def perform
# Do something later
end

def around_cleanup
# Do something before perform
yield
# Do something after perform
end
end
Mailers
# If you want to send the email now use #deliver_now
UserMailer.welcome(@user).deliver_now

# If you want to send the email through Active Job use


#deliver_later
UserMailer.welcome(@user).deliver_later
Backends
● Sidekiq
● Resque
● Sneakers
● Sucker Punch
● Queue Classic
● Delayed Job
Arguments
● Basic types (NilClass, String, Integer, Float, BigDecimal, TrueClass, FalseClass)
● Symbol
● Date
● Time
● DateTime
● ActiveSupport::TimeWithZone
● ActiveSupport::Duration
● Hash (Keys should be of String or Symbol type)
● ActiveSupport::HashWithIndifferentAccess
● Array
Global ID
class TrashableCleanupJob < ApplicationJob
def perform(trashable, depth)
trashable.cleanup(depth)
end
end
Exceptions
class GuestsCleanupJob < ApplicationJob
queue_as :default

rescue_from(ActiveRecord::RecordNotFound) do |exception|
# Do something with the exception
end

def perform
# Do something later
end
end
Retry
class RemoteServiceJob < ApplicationJob
retry_on CustomAppException # defaults to 3s wait, 5 attempts

discard_on ActiveJob::DeserializationError

def perform(*args)
# Might raise CustomAppException or
ActiveJob::DeserializationError
end
end
Sidekiq
Simple, efficient background processing for Ruby.

Sidekiq uses threads to handle many jobs at the same time in the same process.
It does not require Rails but will integrate tightly with Rails to make background
processing dead simple.
class Application < Rails::Application

# ...

config.active_job.queue_adapter = :sidekiq

end

bundle exec sidekiq -q default -q mailers

You might also like