ActiveJob バックエンドとして Rails 4.2 とdelayed_job 4.0.6 を使用しています。
キューに 1 回だけ入れたいジョブがあります。問題のジョブの実行には 1 分以上かかります。モデルのコールバックによってキューに入れられます。コールバックは、ジョブが完了するよりもはるかに頻繁に発生します。今後、ジョブを複数回キューに入れる必要はありません。
これは、私が達成しようとしていることの擬似コードです。
# app/jobs/refresh_account_cache_job.rb
class RefreshAccountCacheJob < ActiveJob::Base
def before_enqueue
skip if job_already_enqueued
end
def perform
Account.write_to_cache
end
def job_already_enqueued
# ?
end
end
再度呼び出されたときにジョブのインスタンスが実行されている場合は、将来のために引き続きキューに入れておく必要があります。将来の実行のためにジョブを最大1回キューに入れる方法を探しています。
答えはdelayed_jobに固有のものでなければならないと思いますが、ActiveJobに一般化できればさらに良いでしょう。