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
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
以上です。
▼この記事がいいね!と思ったらブックマークお願いします
