ruby-on-rails-3 - que - ruby on rails tutorial
PDFKit(wkhtmltopdf) Broken Pipe, OS X y Rails 3 (2)
Cambie /lib/pdfkit/pdfkit.rb:35 a lo siguiente y todo funciona como se espera (también con middleware).
args << ''--quit''
Estoy usando PDFKit (que usa wkhtmltopdf ) en un intento de representar una vista como pdf dentro de una aplicación de Rails 3.
PDFKit se reproduce con Errno::EPIPE (Broken pipe)
apuntando a send_data(kit.to_pdf, :filename => "generated.pdf", :type => ''application/pdf'')
en mi controlador show action:
# Controller
def show
respond_to do |format|
format.html { render }
format.pdf do
html = render_to_string(:layout => false , :action => "show.html.haml")
kit = PDFKit.new(html)
send_data(kit.to_pdf, :filename => "invoice.pdf", :type => ''application/pdf'')
return # to avoid double render call
end
end
end
# Gemfile
...
gem ''pdfkit''
gem ''wkhtmltopdf''
...
Sé que wkhtmltopdf no es la fuente de este error, ya que wkhtmltopdf public/404.html tmp/404.pdf
desde Rails.root
funciona como se esperaba.
Estoy usando un ejemplo de jonathanspies.com después de que el middleware falló de la misma manera.
# config/application.rb
require ''pdfkit''
config.middleware.use PDFKit::Middleware
Después de probarlo en una nueva aplicación de Rails 3, recibo el siguiente error:
command failed: "~/.rvm/gems/ree-1.8.7-2011.01@blog/bin/wkhtmltopdf" "--page-size" "Letter" "--margin-right" "0.75in" "--margin-top" "0.75in" "--margin-bottom" "0.75in" "--encoding" "UTF-8" "--margin-left" "0.75in" "--quiet" "-" "-"
Al ejecutar el comando manualmente y se muestra la pantalla de uso, mirando la opción --quiet es fácil ver que se supone que es --quit
Cambie /lib/pdfkit/pdfkit.rb:35 a lo siguiente y todo funciona como se espera (también con middleware).
args << ''--quit''
Así que, una vez más, he resuelto mi problema en el momento de escribir la pregunta para obtener ayuda (siempre vale la pena incluir detalles). Envié una solicitud de extracción que corrige el error de ortografía (siempre un error tonto que pasa desapercibido). Espero que a nadie le importe que publique de todos modos.
En cuanto a cambiar el argumento silencioso para dejar de fumar.
Este cambio solo es válido si está utilizando la gema wkhtmltopdf que utiliza una versión muy antigua del binario wkhtmltopdf.
Con la gema wkhtmltopdf
10:32:15 wkhtml > wkhtmltopdf --version
wkhtmltopdf 0.8.3 using wkhtmltopdf patched qt
Copyright (C) 2008,2009 Jakob Truelsen,
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Jakob Truelsen
Patches by Mário Silva and Emmanuel Bouthenot
10:32:16 wkhtml > wkhtmltopdf --help | grep quit
-q, --quit Be less verbose.
10:32:16 wkhtml > wkhtmltopdf --help | grep quite
10:32:19 wkhtml >
Con el último binario que he instalado.
10:33:40 tmp > wkhtmltopdf --version
Name:
wkhtmltopdf 0.9.9
License:
Copyright (C) 2008,2009 Wkhtmltopdf Authors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO
WARRANTY, to the extent permitted by law.
Authors:
Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
Bouthenot.
10:33:50 tmp > wkhtmltopdf --help | grep quit
10:34:02 tmp > wkhtmltopdf --help | grep quiet
-q, --quiet Be less verbose
10:34:07 tmp >
El error ortográfico existe en el antiguo binario que viene con la gema wkhtmltopdf. Le sugiero que instale el parche pdfkit con una inicialización o algo basado en si incluyó la gema wkhtmltopdf o no.
También aceptaría una solicitud de extracción que hizo que pdfkit conociera la versión de wkthtmltopdf con la que se estaba ejecutando y cambió condicionalmente ese argumento.