delayed_job で登録したやつを変えたいとき

非同期処理とかで使われる delayed_job で登録しているキューの内容を変えたい時  (元を削除して、登録し直してもヨサソウだけど)

# job 登録
job_id = Notifier.delay(run_at: 2.hours.from_now).some_method(first_args, second_args)

# 取り出す
job = Delayed::Backend::ActiveRecord::Job.find(job_id)

# yamlパース
handler = YAML.load(job.handler)

# some_method の first_args の値を変更
handler.args[0] = 'hogehoge'

# 更新
job.update!(handler: handler.to_yaml, run_at: TEKITO_TIME)

handler カラムの中に yaml 形式でいろいろ情報があるっぽいので、これを更新してやればおっけー。

新しいプロジェクトとかだと delayed_job 使わないかもですが、データストアも MySQL だけで済むので管理しやすくていいなぁ個人的には思いますー。

Active Jobと連携して使うと Sidekiq、 Resque の切替も意識しなくて済むのヨサソウ。

github.com

ちなみに、 Faktory ってのが次世代らしい。

rni-dev.hatenablog.com