Railsで非同期jobを利用する際にSidekiqを使っている場合、任意のJobをスケジュール実行したいことがあります。 今までは割とsidekiq-cronを使うことが多かったのですが、最近はsidekiq-schedulerの方が活発にメンテナンスされており、そちらを使ってみたので導入方法とかをメモ📝
導入方法
導入は簡単で以下のようにinstallして
gem install sidekiq-scheduler # Gemfileに追記してbundle install
既存のconfig/sidekiq.yml
に以下のように追記してあげるだけです。
:schedule: hello_world: cron: '0 * * * * *' # Runs once per minute class: HelloWorld
この辺のsidekiq.rbをいじらずに使えるのも良いですね ✨
dashboardにスケジュールの情報を表示する
web uiも用意されていて以下をroutes.rbに記載すればdashboardにスケジュールを表示できます。
require 'sidekiq/web' require 'sidekiq-scheduler/web' mount Sidekiq::Web, at: '/sidekiq'
その他
またsidekiq-cronと同様にredisに既にエンキューされてないかチェックしてそうなので、複数プロセスで立ち上げた際にスケジュールjobが重複して実行されないようになってそう👀
おわりに
sidekiq-schedulerよさそう!!