wicked rails generate example ruby-on-rails-3 pdf osx-mountain-lion wkhtmltopdf pdfkit

ruby-on-rails-3 - rails - wkhtmltopdf pdf



¿Por qué PDFKit/wkhtmltopdf se cuelga pero genera PDF como se espera cuando se destruye la aplicación Rails? (7)

El mío también colgaba y abría el ícono wkhtmltopdf en el banquillo.

De hecho, me di cuenta de que el problema era que solo tenía en marcha 1 proceso de trabajo de unicornio. Una vez que agregué más de 1, funcionó bien.

Estoy ejecutando wkhtmltopdf 0.9.9 en OS X con pdfkit 0.6.2

Fondo

Después de leer todo, me pareció que Prawn está fuera y wkhtmltopdf está adentro. También parece que las gemas PDFKit y wicked_pdf para Rails son lo nuevo. Así que encontré un screencast de Ryan sobre cómo usar PDFKit . Instalé todo, probé wkhtmltopdf en la CLI sin problemas, jugueteé con la configuración de Rails para ejecutar múltiples procesos para que la canalización de activos funcionara, y todo parecía estar bien, excepto que todavía estoy atascado al final del proceso (en realidad obtengo el PDF respuesta del servidor).

Pregunta

Cuando solicito una versión .pdf de mi vista (estoy usando la opción PDFKit Middleware), mi navegador se queda allí esperando una respuesta, pero tan pronto como mato el proceso de Rails, el PDF que esperaba obtener solo aparece en mi ventana del navegador ¿Lo que da?

Lo que estoy usando

  • OS: OSX 10.8.1
  • Rieles: 3.2.8
  • Ruby: 1.9.3
  • wkhtmltopdf: 0.11.0_rc1 (aunque cuando ejecuto wkhtmltopdf -V dice 0.10.0_rc2)
  • qt: 4.8.2

Qué he hecho

  • Usé el middleware PDFKit cargando config.middleware.use "PDFKit::Middleware" en mi archivo application.rb .
  • gem ''pdfkit'' en mi Gemfile y lo instalé con Bundler
  • establezca .pdf mime-type en mi inicializador mime_types.rb con Mime::Type.register_alias "application/pdf", :pdf
  • agregado config.threadsafe! a config/environments/development.rb para varios subprocesos, por lo que la interconexión de activos no entra en conflicto con el motor de PDF
  • probado wkhtmltopdf http://www.google.com google.pdf y generó un PDF de la página principal de Google como se esperaba
  • intenté intercambiar PDFKit para wicked_pdf y encontré el mismo problema (colgando, pero cuando el proceso Rails se cancela, el PDF se renderiza como se esperaba)

Como se ve

Esta es la página html normal que renderiza Rails (borré los detalles del cliente):

Esta es la salida CLI de Rails cuando intento navegar a localhost:3000/some/path.pdf . (la aplicación se cuelga mientras espera una respuesta):

Cuando finalmente mato el proceso de Rails con ctrl-c el PDF finalmente aparece en el navegador como esperaba verlo (CSS y HTML se procesaron correctamente, por lo que los activos parecen cargar bien):

Conclusiones hasta el momento

Intercambiar PDFKit para wicked_pdf y obtener los mismos resultados parece hacerme pensar que el problema no está en esas bibliotecas, sino en algo relacionado con mi entorno de desarrollo. Pero wkhtmltopdf funciona bien desde la línea de comandos, así que eso me hace pensar que QT y Q están haciendo su trabajo. El problema debe estar en Rails. Tal vez no estoy configurando algo correctamente?

Petición de ayuda

¿Cómo puedo determinar exactamente cuál es el problema y cómo lo soluciono?

Te amaré si me puedes ayudar <3

Actualizar

También intenté usar un método alternativo para renderizar el PDF (con .to_pdf ) sin la opción de middleware de la siguiente manera (haciendo esto, comenté config.middleware.use "PDFKit::Middleware" desde mi archivo application.rb ):

respond_to do |format| format.html format.pdf do html = ''<html><body>This is a test.</body></html>'' @pdf = PDFKit.new(html) send_data @pdf.to_pdf, :filename => ''whatever.pdf'', :type => ''application/pdf'', :disposition => ''attachment'' end end


El problema es con wkhtmltopdf en sí, específicamente, cualquier versión después de 0.9.9. wkhtmltopdf se cuelga cuando se ejecuta directamente desde la línea de comandos.

Pasos para corregir:

brew uninstall wkhtmltopdf cd /usr/local/Library/Formula/ git checkout 6e2d550 /usr/local/Library/Formula/wkhtmltopdf.rb brew install wkhtmltopdf

Luego verifique que la versión correcta esté instalada wkhtmltopdf --version que debería dar wkhtmltopdf 0.9.9 resultado wkhtmltopdf 0.9.9

Citaciones:

  1. https://github.com/mileszs/wicked_pdf/issues/110
  2. http://wearepandr.com/blog/article/homebrew-and-installing-old-package-versions#blog_nav

Exactamente los mismos síntomas pero usando WickedPdf actualmente. En este punto, creo que el problema también recae en wkhtmltopdf .

Lamentablemente, ninguna de las recomendaciones que he podido encontrar en Stack / Google funcionó para mí. En cambio, necesitaba combinar varias sugerencias, incluidas algunas que se encuentran en esta publicación.

La solución fue:

  1. brew uninstall wkhtmltopdf
  2. encuentre y elimine cualquier copia de wkhtmltopdf en /usr/bin
  3. Comentar la línea WickedPdf.config en config/initializers
  4. agregar config.threadsafe! a development.rb
  5. elimine el middleware y permita que la acción ''show'' del controlador principal maneje las solicitudes de PDF (puede no ser necesario)
  6. agregar wkhtmltopdf-binary a gemfile
  7. haz
  8. reiniciar el servidor
  9. Es posible que también deba agregar Mime::Type.register_alias "application/pdf", :pdf a config/initializers/mime_types.rb (para mí, esto causa '' advertencia: ya se ha inicializado el PDF constante '')

Mi configuración fue: Mac OSX Mountain Lion con Rails 3.2.1, Webrick, Postgres y wkhtmltopdf-binary (0.9.9.1).


Intente editar config/initializer/pdfkit.rb de la siguiente manera:

PDFKit.configure do |config| config.wkhtmltopdf = Rails.root.join(''bin'', ''wkhtmltopdf-i386'').to_s config.default_options = { :encoding=>"UTF-8", :page_size=>"A4", :margin_top=>"0.25in", :margin_right=>"0.1in", :margin_bottom=>"0.25in", :margin_left=>"0.1in", :disable_smart_shrinking=> false } end


La manera fácil en MacOS:

brew install Caskroom/cask/wkhtmltopdf


La solución de scarver2 funcionó para mí según lo anunciado. Pero necesitaba una versión más reciente de wkhtmltopdf . Como la versión homebrew todavía parece obsoleta (todavía se cuelga en la línea de comandos), y como no hay disponible un binario precompilado reciente, utilicé el script de construcción os x para compilar uno yo mismo:

$ git clone [email protected]:wkhtmltopdf/wkhtmltopdf.git $ cd wkhtmltopdf $ ./build_osx.sh # i''m running 10.9.2 $ bin/wkhtmltopdf --version Name: wkhtmltopdf 0.12.1-72a9f2066fe9ffd162dec007a4d9b6a5cd63b670 $ curl www.example.com | bin/wkhtmltopdf - test.pdf # render pdf of example.com $ open test.pdf # to confirm pdf

Estoy usando pdfkit 0.6.2 con Rails 3.2.17 . Puse el binario en /vendor y, en un inicializador de pdfkit , lo señalé con config.wkhtmltopdf . Hasta aquí todo bien.


Tengo el mismo problema. Funciona cuando agregué: ''config.threadsafe!'' en application.rb como la respuesta en la pila . Espero que esto ayude.