開発運用中のサイト
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の起動コマンドが反映されていることを確認する おk。
これでworkerのスレッドが1になり、同時に起動できるseleniumが1つになったので上記のエラーは起きなくなった。
もしseleniumのような重い処理をしたい場合は、worker dynoのメモリを上げるか、worker dynoの数を増やして対応する必要がある。ただし要課金。。