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

Active Jobで指定時間後にジョブを実行する

setメソッドの引数にwaitを指定する

bot tweetするrubyスクリプト

8時間ほどで申請が通っていた

RailsのログをLogrageに変更する

ログを1行にまとめてくれるので便利

request specでリダイレクトのテストをする

redirect_toが使えた

Extension fieldsを使ってdocker-composeのコンテナ設定を共通化する

Railsコンテナ設定を共通化して、commandだけそれぞれで変えるようにした

Railsログに^{[0m ^{[1mが残るのを止める

colorize_loggingを無効化