Implementing mupdf for ActiveStorage on Heroku

I’ve upgraded to rails 5.2 and am implementing ActiveStorage. ActiveStorage uses mutool for PDF processing. I have successfully installed mutool locally using homebrew.

mutool is a bit confusing.

rails docs claim to require “mutool”,

homebrew installs “mupdf-tools”,

and heroku wants “mupdf”.

I have successfully installed apt and mupdf on heroku following these steps:

  • add a new Aptfile to the root of my application with only “mupdf” listed

  • commit and push the Aptfile

  • THEN run heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt

  • push again so heroku will finish installing apt and mupdf

mupdf builds successful during the push

heroku buildpacks now returns

  1. https://github.com/heroku/heroku-buildpack-apt

  2. heroku/ruby

If I refresh a page calling for a variant on a PDF, the image fails to process and the job kicks back the following error:

Errno::ENOENT: No such file or directory - mutool

It seems mutool and mupdf are synonomous…so, I tried swapping out mutool for mupdf in my Aptfile…that failed to build from "…not found’.

Anyone know what action I need to take?

PS: This is part of implementing rails 5.2 using ActiveStorage.

UPDATE

I added mupdf-tools to Aptfile and that seems to fix the “no such file or directory” error. I don’t know for sure because a new errors surfaces

MiniMagick::Invalid: identify /tmp/mini_magick20180105-4-pvub9r failed with error: identify.im6: no decode delegate for this image format `/tmp/mini_magick20180105-4-pvub9r’ @ error/constitute.c/ReadImage/544.

MiniMagick::Error: identify -format %m %w %h %b /tmp/ActiveStorage20180105-4-1f46tem[0] failed with error: identify.im6: no decode delegate for this image format `/tmp/ActiveStorage20180105-4-1f46tem’ @ error/constitute.c/ReadImage/544.

I realized this was only happening in development. I started comparing the two environments…I removed everything from development.rb and started putting things back until the error showed up. This led me to learn that the issue originated in the bullet gem…and, they have an update from 2 days ago. Boooya.

updating bullet to 5.7.1 fixed this