Solid Queueのジョブを削除する

RailsのActive Job はジョブを削除するインターフェイスを提供していません。
Rails 8からSolid Queueがデフォルトのバックエンドになりました。
今回はSolid Queueを直接操作してジョブを削除します。

Solid Queue README — DBベースのActive Jobバックエンド(翻訳)

Solid Queueは、Active Jobで利用できるDBベースのキューバックエンドであり、シンプルさとパフォーマンスを念頭に置いて設計されています。

環境
Ruby 3.4.2
Rails 8.0.2
solid_queue 1.1.4

手順
アプリを作成します。

rails new toriyame
cd toriyame

ジョブを生成します。

bin/rails generate job guests_cleanup

Active Job の基礎 – Railsガイド

3 Solid Queue: デフォルトのバックエンド
3.1 セットアップ
3.1.1 development環境の場合
development環境のRailsは、非同期のインプロセスキューイングシステムを提供し、ジョブをメモリ上に保持します。…production環境と同じ方法で以下のようにdevelopment環境のジョブキューシステムを設定できます。

development環境でSolid Queueを使います。

config/environments/development.rb

  config.active_job.queue_adapter = :solid_queue
  config.solid_queue.connects_to = { database: { writing: :queue } }

config/database.yml

development:
  primary:
    <<: *default
    database: storage/development.sqlite3
  queue:
    <<: *default
    database: storage/development_queue.sqlite3
    migrations_paths: db/queue_migrate

Solid Queueデータベースを作成し、スキーマを読み込みます。

bin/rails db:migrate:queue

コンソールで動作確認します。

bin/rails console/code>

明日の12:00に実行するジョブを登録(enqueue: エンキュー)します。

job = GuestsCleanupJob.set(wait_until: Date.tomorrow.noon).perform_later
job_id = job.job_id

登録したジョブをjob_idを指定して削除します。

SolidQueue::Job.find_by(active_job_id: job_id)&.destroy

以上です。



▼この記事がいいね!と思ったらブックマークお願いします
このエントリーをはてなブックマークに追加