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
には溜まるけど、配信されないというつらい状況に。
原因はこの設定を参照する以下の行でのエラー
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から消してから配信という手もあったかもしれません。
ご迷惑をおかけしまして申し訳ございません₍₍ ε=з ⁾⁾