Sidekiqで指定時間待ってから実行する

公開日時

sidekiqで非同期処理を実行する際にperform_asyncだとキューに入ってからすぐに実行されるが、指定時間待ってから実行するようにしたかったので対応方法を調査。

wikiに載っていた。

perform_inを使って第一引数に秒数を指定すれば、指定時間待ってから実行されるようになる。

SomeWorker.perform_in(1, 'bob', 5)

perform_atを使って第一引数にtimestampを指定すれば、その時間に実行されるようになるとのこと。

SomeWorker.perform_at(1.second.from_now, 'bob', 5)

今回試した用途ではperform_inが適していたのでperform_inで対応した。

ただ、Scheduled Jobsは正確な秒数を待ってくれるわけではなく、デフォルトだと5秒おき(5.1以前は15秒おき)にジョブのチェックをして指定時間を越えていたら実行するようになっているとのこと。

今回は1秒間隔でチェックしてほしかったので↓も合わせて設定した。

Sidekiq.configure_server do |config|
  config.average_scheduled_poll_interval = 1
end

Related #ruby

VSCode + PrettierでRubyのコードを自動フォーマットする

@prettier/plugin-rubyを利用

VSCodeでRails環境を整える

ショートカット大事

VSCodeでRubyのコード補完と関数ジャンプができるようにする

ruby拡張とsolargraph拡張を入れる

Action Mailerのインターセプタを使ってバウンスメールのチェックを行う

AWS SESを使っている場合はバウンス対応をやっておかないとサービス停止になってしまう

open-uriでhttpリクエストを送信する際のtimeout設定

モンキーパッチを当てた

docker-composeでRails6環境をrails newしたら途中で止まってしまった

--skip-gitオプションを追加する必要があった