sidekiqの亡霊に悩まされた話

ブクマのサーバの構成にはapiサーバの他に非同期処理を行うためのworkerサーバがあって、sidekiqで非同期処理を送っているんだけどこのsidekiqが曲者だった。

 

バックログでプッシュ通知の不安定さ解消とあったのでコードを見るとAWSのcredentialが設定されていなかったので

 

Aws.config[:credentials] = Aws::Credentials.new(AMAZON_CREDENTIAL_API_KEY, AMAZON_CREDENTIAL_API_SECRET)

Aws.config[:region] = 'ap-northeast-1'

 

のようにcredentialをセット。capistranoを使ってデプロイ!
サーバに入ってコードを見ても反映されてる。
しかし、エラーログ without credential set。

capistrano/sidekiqしとけば大丈夫と思っていたのでマジで意味わからなかった…

bundle exec cap worker sidekiq:restartで直接再起動してもダメ…

 

どうやらこういうことっぽい

[2017-04-05T23:40:18.157725 #14295] ERROR -- : unable to sign request without credentials set

[2017-04-05T23:41:45.329173 #126028] DEBUG -- :

 

サーバの中に14295と126028の二つのプロセスが乱立している。で、エラーが起きているのは14295だけ。

 

tmp/pids/sidekiq.pidファイルがすでに14295のプロセスが存在してたから新しいpidファイルが作られてこうした状態になっていたようだ

 

bundle exec sidekiqctl stop tmp/pids/sidekiq.pid で古いprocessをstopして新しいidに置き換えたらエラーが起きなくなった!

 

sidekiq難しい…