Ferrum gem は Rails で PDF を作成する便利 Gem です。Chromium で動作します。
しかし、手元の環境(WSL2)では問題なく動作したのですが Ubuntu Server では動作せず以下のエラーが発生しはまったので対策を共有します。
Ferrum::ProcessTimeoutError (Browser did not produce websocket url within 10 seconds, try to increase
:process_timeout
. See https://github.com/rubycdp/ferrum#customization):
環境
- Rails 7.0.2.2
- ferrum 0.16
- Ubuntu 22.04.4 LTS
- Chromium 132.0.6834.110
結論
以下のコマンドで非rootユーザーでもログインしていなくてもサービスを実行するようにしておくと動作します。
sudo loginctl enable-linger アプリ実行ユーザ
このコマンドの help は Enable linger state of one or more users です。
背景
いろいろ設定が標準的ではないのですが設定など共有しておきます。
Rails内では以下のように browser を設定していた。
browser = Ferrum::Browser.new(
browser_path: '/usr/bin/chromium-browser',
browser_options: { 'no-sandbox': nil }
)
sudo apt install chromium-chromedriver
でインストールします。
しかし、ためしに chromium-browser を実行するとこんなメッセージが出て実行されません。
$ chromium-chromedriver --version
/user.slice/user-2.slice/session-12345.scope is not a snap cgroup
id 2 はアプリ実行ユーザに su するまえの別ユーザです。以下のようにすると動作します。
$ sudo loginctl enable-linger deploy
$ chromium-chromedriver --version
/usr/bin/chromium-browser: 12: xdg-settings: not found
Chromium 132.0.6834.110 snap
ちょっとこのへんの背景の権限まわりの理解が浅いままできょうしゅくですが、Ferrum や Chromium のサイト( https://www.chromium.org/Home/ )では標準的なインストール・利用方法がなくはまり、Ferrum のエラーメッセージから原因特定に手間取ったため、どなたかの参考になればと共有します。
なにか根本的な勘違いをしているなどあればお知らせください。
あとで検索すると、こんなQAもありました。