Open2
Delayed Job

Delayed Jobとは
Railsで非同期処理を行うジョブキューライブラリ
なおRailsのActive Job
はSidekiq
やDelayed Job
等のジョブキューライブラリの違いを気にせずにジョブ管理ができるライブラリ
使い方
インストール
gem 'delayed_job_active_record'
テーブル作成
ジョブ保存用のテーブルを作成
rails generate delayed_job:active_record
rails db:migrate
ジョブキューへの追加
class GuestsCleanupJob < ApplicationJob
queue_as :default
self.queue_adapter = :delayed_job
def perform
puts "hello"
end
end
> GuestsCleanupJob.perform_later
TRANSACTION (0.2ms) BEGIN
Delayed::Backend::ActiveRecord::Job Create (1.0ms) INSERT INTO "delayed_jobs" ("priority", "attempts", "handler", "last_error", "run_at", "locked_at", "failed_at", "locked_by", "queue", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING "id" [["priority", 0], ["attempts", 0], ["handler", "--- !ruby/object:ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper\njob_data:\n job_class: GuestsCleanupJob\n job_id: 9e765bcb-1ea0-4eda-9c52-7542af4692d1\n provider_job_id:\n queue_name: default\n priority:\n arguments: []\n executions: 0\n exception_executions: {}\n locale: en\n timezone: UTC\n enqueued_at: '2024-12-15T06:19:54Z'\n"], ["last_error", nil], ["run_at", "2024-12-15 06:19:54.823268"], ["locked_at", nil], ["failed_at", nil], ["locked_by", nil], ["queue", "default"], ["created_at", "2024-12-15 06:19:54.823395"], ["updated_at", "2024-12-15 06:19:54.823395"]]
TRANSACTION (0.6ms) COMMIT
Enqueued GuestsCleanupJob (Job ID: 9e765bcb-1ea0-4eda-9c52-7542af4692d1) to DelayedJob(default)
=>
#<GuestsCleanupJob:0x00000001098b6e60
@arguments=[],
@exception_executions={},
@executions=0,
@job_id="9e765bcb-1ea0-4eda-9c52-7542af4692d1",
@priority=nil,
@provider_job_id=2,
@queue_name="default",
@successfully_enqueued=true,
@timezone="UTC">
ジョブの実行
% rake jobs:work
[Worker(host:xxx.local pid:16482)] Starting job worker
[Worker(host:xxx.local pid:16482)] Job GuestsCleanupJob [9e765bcb-1ea0-4eda-9c52-7542af4692d1] from DelayedJob(default) with arguments: [] (id=2) (queue=default) RUNNING
hello
[Worker(host:xxx.local pid:16482)] Job GuestsCleanupJob [9e765bcb-1ea0-4eda-9c52-7542af4692d1] from DelayedJob(default) with arguments: [] (id=2) (queue=default) COMPLETED after 0.0080
[Worker(host:xxx.local pid:16482)] 1 jobs processed at 21.5880 j/s, 0 failed
検証
参考

ジョブ確認コマンド
ジョブの総数取得
Delayed::Job.count
ジョブの一覧取得
Delayed::Job.all
失敗しているジョブの取得
Delayed::Job.where.not(last_error: nil)
SQLの場合は以下
ジョブの総数取得
SELECT COUNT(*) FROM delayed_jobs;
失敗しているジョブの取得
SELECT * FROM delayed_jobs WHERE last_error IS NOT NULL;