- David Wessman
Error: Documents::UploadJobTest#test_#perform_creates_an_activity_for_document: MiniMagick::Error: `convert /tmp/shrine20201009-22018-5itpj9.pdf -auto-orient /tmp/image_processing20201009-22018-1uk39lv.png` failed with error: convert-im6.q16: not authorized `/tmp/shrine20201009-22018-5itpj9.pdf' @ error/constitute.c/ReadImage/412. convert-im6.q16: no images defined `/tmp/image_processing20201009-22018-1uk39lv.png' @ error/convert.c/ConvertImageCommand/3258. app/uploaders/document_uploader.rb:13:in `block in <class:DocumentUploader>' test/jobs/documents/documents_upload_job_test.rb:8:in `block in <class:UploadJobTest>'
In my Ruby on Rails application, this error is raised when using MiniMagick to convert a PDF into an image. MiniMagick uses ImageMagick which uses Ghostscript for anything related to postscript files - for example PDFs.
Due to a security vulnerability in Ghostscript < 9.24, ImageMagick changed the default policy to not allow conversions using Ghostscript. Even if Ghostscript has fixed the vulnerability, the ImageMagick policy has not been changed.
On Github Actions the default linux image is Ubuntu 18.04 (20.04 in preview). Ubuntu 18.04 should have an updated version of Ghostscript, but still has a policy for ImageMagick that disallows conversion from PDF to an image.
My solution was inspired by this StackOverflow answer. It can be added to a Github Action like this:
# --- jobs: job01: runs-on: ubuntu-latest # ubuntu-18.04 steps: - name: Change ImageMagick policy to allow pdf->png conversion. run: | sudo sed -i 's/^.*policy.*coder.*none.*PDF.*//' /etc/ImageMagick-6/policy.xml - <more steps>
If you experience this error on Mac OS it can be helpful to reinstall ImageMagick and Ghostscript:
brew uninstall ghostscript imagemagick brew install ghostscript imagemagick gs --version # make sure it is > 9.24 (9.53.3 on my machine currently.) magick --version # make sure the row `Delegates` includes `gslib`