pblog

pplog.net を作っている @ppworks こと越川直人(Koshikawa Naoto)のブログ。esa LLCで働いてます(\\( ⁰⊖⁰)/)

pplogの通知がたまって、いっきにバーーーン!ってした話。

Sidekiq.configure_server do |config|
  config.options[:concurrency] = ENV.fetch('SIDEKIQ_CONCURRENCY', 5)
  config.redis = { url: ENV['REDIS_URL'] }
end

Sidekiqのconcurrencyを環境変数から、スッと変えられるようにこんな設定ファイルを書いてました。

そのせいで、環境変数SIDEKIQ_CONCURRENCYへ値をセットすると、sidekiqが立ち上がらないという状況が起きていて、通知がredisには溜まるけど、配信されないというつらい状況に。

原因はこの設定を参照する以下の行でのエラー

https://github.com/mperham/sidekiq/blob/3b00587ea0b3f887df9053ee2f6b42a69481b5ce/lib/sidekiq/redis_connection.rb#L15

size = options[:size] || (Sidekiq.server? ? (Sidekiq.options[:concurrency] + 5) : 5)

ここで、no implicit conversion of Integer into Stringが発生します。

環境変数といえば?

irb
irb(main):001:0> ENV.fetch('SIDEKIQ_CONCURRENCY', 5)
=> 5
SIDEKIQ_CONCURRENCY=1 irb
irb(main):001:0> ENV.fetch('SIDEKIQ_CONCURRENCY', 5)
=> "1"

あ!環境変数から読み込んだら文字列になるじゃん、そりゃそう。

てなわけで、

Sidekiq.configure_server do |config|
 -  config.options[:concurrency] = ENV.fetch('SIDEKIQ_CONCURRENCY', 5)
 +  config.options[:concurrency] = Integer(ENV.fetch('SIDEKIQ_CONCURRENCY', '5'))
end

としてあげる必要がありました。さらに、push通知は驚くだろうし、redisから消してから配信という手もあったかもしれません。

ご迷惑をおかけしまして申し訳ございません₍₍ ε=з ⁾⁾