ruby+rails +redis+sidekiqのときにdeliver_laterキューが実行されない場合のチェックポイント

タイトルのまんまですが

ruby+rails +redis+sidekiqのときにキューが実行されない場合のチェックポイント」を今回はお伝えします!

 

答えから言うと、

「redisサーバは起動してる?」

「config/sidekiq.ymlに追加した?」

 

ruby+rails +redis+sidekiqのときにキューが実行されない場合のチェックポイント

ローカルの開発画面で /sidekiqと打つと出てくるsidekiqのダッシュボード。

あそこの「待機」にキューが溜まって(数値が1以上になってる)いると、それはうまく処理されてない状態。

まずは何より、redisサーバの起動を確認しましょう。

ps aux | grep redis #redisのプロセスを確認(起動を確認)

redis-server #スタートコマンド

 

まずはこれを確認します。

どうやらこれが動いてるならjobの仕組みは問題ない。

次に見落としがちなのがconfig/sidekiq.ymlです。

 

ちょっと、ここから僕がつまずいた話しを、ストーリーでご説明します。

 

僕がいま関わってるrails案件でjobの処理はやってるんですが、メール送信の機能がありませんでした。

新しくメール機能実装のため、ActionMailerによるdeliver_laterのキューイング+メール送信を新規で開発しました。

単純でmailerを実装したあとに、controllerのメソッドで↓のようにするだけです。

UserMailer.send_registed_mail(email).deliver_later

この辺は、ActionMailderの日本語ドキュメントのとおりです。

そして僕の場合にはこれを実行してもメールが送信されませんでした。

 

それでmy_domein.com/sidekiqのURLにアクセスしたところ待機にキューが溜まってました。

そこをクリックすると

「mailer」のいうのがあって、ずーっと処理されません。

ほかのjobは処理されているようです。なので、これは処理するにはどこかに設定値があるかも?と思って探しました。

そしたらありました。

config/sidekiq.ymlです。

 

 

:queues:
- [abc, 1]

- [def, 2]

- [mailer, 9] #追加した

 

こんな感じです。

これでpuma(アプリサーバ)を再起動したらsidekiqがmailerのjobを拾ってくれるようになりました。

めでたし!

 

より細かいことは安定のクラスメソッドさんブログが役に立ちます!!

[Ruby on Rails]Active Job – 複数のキューを優先順位をつけて実行する