Sidekiq
RailsのActiveJobには、未来に登録したJobをキャンセルするサポートがありません。
なので、Job実行にSidekiqを使い、キャンセルにSidekiqのAPIを使います。
Gemfile
に以下を追加して、bundle install
gem 'sidekiq'
config/sidekiq.yml
に以下を記述
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
- default
Active JobがSidekiqを使用することを、config/application.rb
に記述する。
config.active_job.queue_adapter = :sidekiq
キャンセルはこんな感じで行います。
require 'sidekiq/api'
job = ジョブ名.set(wait_until: Date.tomorrow.noon).perform_later(*args)
job.job_id #これでジョブを特定するIDがわかる
job_list = Sidekiq::ScheduledSet.new
job_list.find{ |job| job.arga[0]['job_id'] == job.job_id }.delete
ジョブ実行をSidekiqに変更したので、ローカル開発時は
redis-server
でRedisを立ち上げた後、
別ターミナルでbundle exec sidekiq
でSidekiqを立ち上げて
Jobを使いましょう