herokuのwoker dynoでworkerに複数のseleniumを起動させるとエラーが出る件を解決する

開発運用中のサイト

www.suumo-de-aimitu.com

sidekiqでworkerに複数のseleniumを動かさせるといろんなエラーが出る

 ちなみに、worker1つにつき1つのseleniumを起動させるようにするとエラーは出ない。

実行環境

  • heroku hobbyのwebとworkerを1台ずつ。

発生しているエラー

Selenium::WebDriver::Error::SessionNotCreatedError

 これらのエラーが出る心当たりは、コード上にはない。。そもそも1つずつ実行している限りは出ないエラーなのだから。

app[worker.1]: E, [2021-10-31T02:31:27.305509 #4] ERROR -- : [ActiveJob] [SendAimitumoriJob] [9ace56e7-3cd4-49b8-97df-e9f3117d32a2] Error performing SendAimitumoriJob (Job ID: 9ace56e7-3cd4-49b8-97df-e9f3117d32a2) from Sidekiq(default) in 272358.39ms: Selenium::WebDriver::Error::SessionNotCreatedError (session not created
app[worker.1]: from disconnected: unable to connect to renderer
2021-10-31T02:31:35.593677+00:00 app[worker.1]: E, [2021-10-31T02:31:35.593564 #4] ERROR -- : [ActiveJob] [SendAimitumoriJob] [a4ca2ab8-3f33-464d-b607-e9a5d5c165a2] Error performing SendAimitumoriJob (Job ID: a4ca2ab8-3f33-464d-b607-e9a5d5c165a2) from Sidekiq(default) in 320654.73ms: Selenium::WebDriver::Error::NoSuchElementError (no such element: Unable to locate element: {"method":"css selector","selector":".actionunit\-submit\-btn"}
app[worker.1]: (Session info: headless chrome=94.0.4606.81)):

解決方法:woker dynoのスレッドを1に設定する。

  • Procfileを編集する
worker: bundle exec sidekiq -c 1 -q default -q mailers
  • herokuのdynoを再起動する
heroku restart --app hoge
  • 管理画面でsidekiqの起動コマンドが反映されていることを確認する f:id:spreadthec0ntents:20211031154616p:plain  おk。

 これでworkerのスレッドが1になり、同時に起動できるseleniumが1つになったので上記のエラーは起きなくなった。
 もしseleniumのような重い処理をしたい場合は、worker dynoのメモリを上げるか、worker dynoの数を増やして対応する必要がある。ただし要課金。。