発生した問題
CarrierWave + MiniMagickを使ってPDFをPNGに変換する処理を書いており、今までGitHub Actionsでそのテストを回していたが、昨日(2021-1-28)から以下のようなエラーが出てテストが落ちるようになった。
Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: `convert /home/runner/work/project-name/tmp/1611830955-943232923084175-0016-3156/thumb/sample.pdf -auto-orient /tmp/image_processing20210128-5864-128hawr.png` failed with error:
convert-im6.q16: no images defined `/tmp/image_processing20210128-5864-128hawr.png' @ error/convert.c/ConvertImageCommand/3258.
原因
ghostscriptがデフォルトでインストールされなくなっていたため。
UbuntuのVirtual Environmentのバージョンが変わったのでインストールされなくなった?(詳細未確認)
対応
ghostscriptをインストールするようにした。
- name: Install packages
run: |
- sudo apt-get -yqq install libgbm1
+ sudo apt-get -yqq install libgbm1 ghostscript
その他メモ
- 冒頭に挙げたエラーメッセージでネットを検索すると、
/etc/ImageMagick-6/policy.xml
で<policy domain="coder" rights="none" pattern="PDF" />
を<policy domain="coder" rights="read|write" pattern="PDF" />
に変更しろ、という話がよく載っているが(参考)、これはすでに対応済みだったので今回の件には関係なかった。 - ghostscriptがインストールされていないのでは?という観点はこのQ&Aを見て思いついた。RSpecのテストコード内で
puts `which gs`
のように書いてGitHub Actions上でgsコマンドが見つからないことを確認した。 - ImageMagickのconvertコマンドに
-debug All
というオプションを渡すと、convert実行時の詳細情報が表示されるので、この情報をGitHub Actions上で出力させると詳細な原因がわかるかもしれない。(例puts `convert -debug All #{Rails.root.join('path/to/your.pdf')} /tmp/foo.png`
) - rspecコマンドに
-b
オプションを渡すと詳細なバックトレースを出力してくれるので、GitHub Actionsのコマンドに付けておくとヒントが得られるかもしれない。(例run: bundle exec rspec -b
)