Active Job là interface thống nhất để tạo và enqueue background jobs — có thể chạy với nhiều backend (Sidekiq, Resque, GoodJob) mà không đổi code job.
Tại sao cần: một số tác vụ không nên chạy trong HTTP request vì tốn thời gian hoặc dễ fail (gửi email, resize ảnh, gọi API bên ngoài, generate report).
ruby
class WelcomeEmailJob < ApplicationJob
queue_as :default
def perform(user_id)
user = User.find(user_id)
UserMailer.welcome(user).deliver_now
end
end
WelcomeEmailJob.perform_later(user.id) # async
WelcomeEmailJob.set(wait: 5.minutes).perform_later(user.id) # delayedLưu user.id thay vì object — object có thể stale khi job thực thi.