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).
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.
Active Job is a unified interface for creating and enqueuing background jobs — it can run with different backends (Sidekiq, Resque, GoodJob) without changing the job code.
Why it's needed: some tasks shouldn't run inline in an HTTP request because they are slow or failure-prone (sending email, resizing images, calling external APIs, generating reports).
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) # delayedPass user.id not the object — the object may be stale by the time the job runs.