タイトルのまんまですが
「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を拾ってくれるようになりました。
めでたし!
より細かいことは安定のクラスメソッドさんブログが役に立ちます!!