Hace un par de meses comente en el post "PDFKit irreverencia y monkey patches" que estaba haciendo uso de PDFKit para generar formatos llenos a partir de la información que un usuario captura en una forma web.
En esa ocasión también mencione que PDFKit no estaba funcionando de manera correcta para mi y por mis búsquedas en Google, al parecer había mas persona que sufrían del mismo problema. Mencione también que había encontrado al solución a mi problema modificando el método to_pdf de la clase PDFKit, donde modifique la forma en como desde Ruby se estaba ejecutando un subproceso, el cual recibía a través de un pipe la entrada de datos y a través de otro pipe, este subproceso nos generaba un resultado.
Este subproceso es la llamada a wkhtmltopdf, el cual es una herramienta de linea de comando, que puede recibir a través de un pipe de entrada código de HTML, para posteriormente convertir ese código a un archivo PDF, la solución fue modificar el código de la función to_pdf para hacer uso de IO.popen.
En ese momento que hice mi cambio no envie parche a PDFKit lo deje en la lista de espera, y de momento hice un "Monkey Patch" de la libreria en mi aplicación de Rails. Has hace unos dias me acorde del parche y me dispuse a enviarlo, pero revisando los commits en PDFKit me di cuenta que alguien mas ya había enviado el parche con mi misma solución. Así que solo procedi a quitar mi "Monkey Patch" y actualizar la libreria a la version v0.5.0.
Finalmente ya a punto de hacer el deploy de la aplicación a Heroku, surgió la situación de como instalar la libreria wkhtmltopdf en el slug de Heroku. La solución es facil y la encontre en este post.
Basicamente lo que tenemos que hacer es descargar wkhtmltopdf compilado de forma estática para la plataforma Linux AMD64, ponemos el ejecutable en un directorio bin dentro de nuestro RAILS_ROOT y creamos un archivo de inicialización donde le indiquemos a PDFKit que el wkhtmltopdf esta en nuestro directorio bin, el archivo de inicialización puede ser config/initializers/pdftokit.rb:
PDFKit.configure do |config|
config.wkhtmltopdf = Rails.root.join('bin', 'wkhtmltopdf-amd64').to_s if Rails.env.production?
Listo con esto podemos usar PDFKit en Heroku.