37 votes

Pourquoi ne PDFKit/wkhtmltopdf accrocher, mais rend PDF comme prévu lors de l'application Rails, est tué?

Arrière-plan

Après la lecture de autour de il me semblait que la Crevette est sorti et wkhtmltopdf est dans. Il semble aussi que la PDFKit et wicked_pdf gemmes pour les Rails de la nouvelle cool. J'ai donc trouvé un screencast par Ryan sur la façon d'utiliser PDFKit. J'ai tout installé, testé wkhtmltopdf sur la CLI avec pas de problèmes, trafiqué autour avec des Rails settingsto l'exécution de plusieurs processus, de sorte que l'asset pipeline fonctionne, et tout avait l'air bon, sauf que je suis toujours bloqué à la fin du processus (en fait obtenir le PDF de réponse du serveur).

Question

Lorsque je demande un .pdf version de mon point de vue (je suis en utilisant le PDFKit Middleware option) mon navigateur est juste assis là à attendre une réponse, mais dès que j'ai tuer les Rails le processus de PDF je m'attendais à obtenir alors seulement apparaît dans ma fenêtre de navigateur. Ce qui donne?

Ce que je suis en Utilisant

  • OS: MAC OS X 10.8.1
  • Rails: 3.2.8
  • Ruby: 1.9.3
  • wkhtmltopdf: 0.11.0_rc1 (bien que lorsque j'exécute wkhtmltopdf -V il est dit 0.10.0_rc2)
  • qt: 4.8.2

Ce que j'ai Fait

  • utilisé le PDFKit middleware en chargeant config.middleware.use "PDFKit::Middleware" mon application.rb le fichier.
  • inclus gem 'pdfkit' dans mon Gemfile et installé avec Bundler
  • définir l' .pdf type mime dans mon mime_types.rb initialiseur avec Mime::Type.register_alias "application/pdf", :pdf
  • ajouté config.threadsafe! de config/environments/development.rb pour plusieurs threads afin asset pipeline n'entre pas en conflit avec moteur PDF
  • testé wkhtmltopdf http://www.google.com google.pdf et il a généré un PDF de la page d'accueil de Google comme prévu
  • essayé de permutation PDFKit pour wicked_pdf et rencontré le même problème (la pendaison, mais quand les Rails le processus est tué, le PDF rend comme prévu)

Ce à quoi il Ressemble

Ceci est la page html ordinaire rendus par les Rails (j'ai brouillé les informations sur le client): enter image description here

C'est la CLI de sortie par les Rails quand j'essaie de naviguer à l' localhost:3000/some/path.pdf. (l'application se bloque en attente d'une réponse): enter image description here

Quand j'ai finalement tuer les Rails un processus avec l' ctrl-c le fichier PDF enfin s'affiche dans le navigateur que je m'attendais à le voir (et le CSS et le HTML rendus correctement, de sorte que les actifs semblent charge très bien): enter image description here

Conclusions Jusqu'À Présent

La permutation PDFKit pour wicked_pdf et d'obtenir les mêmes résultats semble me font penser que le problème n'est pas avec ces bibliothèques, mais quelque chose à voir avec mon environnement de développement. Mais wkhtmltopdf fonctionne très bien hors de la ligne de commande, ça me fait penser à elle et QT sont en train de faire leur travail. Le problème doit être dans les Rails. Peut-être que je ne suis pas la configuration de quelque chose de bien?

Appel à l'Aide

Comment puis-je déterminer de quoi exactement le problème et comment puis-je résoudre ce problème?

Je vais vous aimer si vous pouvez m'aider <3

Mise à jour

J'ai aussi essayé d'utiliser une autre méthode de rendu PDF (avec .to_pdf) sans l'option du middleware comme suit (en faisant cela, je commentée config.middleware.use "PDFKit::Middleware" de mon application.rb le fichier):

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

70voto

scarver2 Points 2605

Le problème, c'est avec wkhtmltopdf lui-même, plus précisément, toute version après 0.9.9. wkhtmltopdf se bloque lors de l'exécuter directement à partir de la ligne de commande.

Étapes à suivre pour corriger:

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

Vérifiez la version correcte est installé wkhtmltopdf --version ce qui devrait générer wkhtmltopdf 0.9.9

Citations:

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

2voto

user778174 Points 15

Le correctif en scarver2 a fonctionné pour moi comme annoncé. Mais j'avais besoin d'une version plus récente d' wkhtmltopdf. Depuis la version homebrew encore semble dépassée (elle se trouve toujours sur la ligne de commande), et depuis il n'est pas un phénomène récent binaires précompilés disponible, j'ai utilisé l'os x script de compilation pour compiler moi-même:

$ git clone git@github.com: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 

Je suis à l'aide d' pdfkit 0.6.2 avec Rails 3.2.17. J'ai mis le binaire en /vendor et, pdfkit initialiseur, a souligné que, avec config.wkhtmltopdf. Pour l'instant, donc bon.

1voto

Jacky Points 1063

J'ai eu le même problème. Il fonctionne lorsque j'ai ajouté: "config.thread-safe! " dans l'application.rb comme la réponse dans la pile. Espérons que cette aide.

0voto

Brian Rollins Points 48

Exactement le même symptôme, mais à l'aide de WickedPdf actuellement. À ce point, je crois que le problème réside dans la wkhtmltopdf ainsi.

Malheureusement, aucune des recommandations que j'ai pu trouver dans/Pile, Google a travaillé pour moi.

Au lieu de cela, j'avais besoin de combiner plusieurs suggestions, dont certains ont trouvé dans ce post. Merci Les Gars!

Ma configuration actuelle est:
Mac OSX Mountain Lion
Rails 3.2.1
Webrick
Développement
Postgres
wkhtmltopdf-binaire (0.9.9.1)

La Solution était:
1) brew désinstaller wkhtmltopdf
2) trouver et supprimer toutes les copies de wkhtmltopdf dans usr/bin
3) commentaire 'WickedPdf.config' de ligne dans le fichier config/initializers
4) ajouter config.des threads! pour le développement.rb
* 5) enlever le middleware et permettent à "montrer" l'action de contrôleur principal pour gérer les pdf des demandes (peut-être pas nécessaire)
4) ajouter "wkhtmltopdf-binaire" pour gemfile
5) bundle
6) redémarrez le serveur
* 7)Vous pouvez aussi avoir besoin d'ajouter "Mime::Type.register_alias "application/pdf", :pdf" config/initializers/mime_types.rb (pour moi, cela provoque un "avertissement: déjà initialisé constante PDF')

0voto

Bob Fleming Points 1

Mine a également été suspendus et l'ouverture de la wkhtmltopdf icône dans le dock.

J'ai effectivement trouvé le problème pour moi est j'ai seulement eu 1 licorne processus de travail en cours d'exécution. Une fois que j'ai ajouté plus de 1 il a bien fonctionné.

Je suis en cours d'exécution wkhtmltopdf 0.9.9 sur OS X avec pdfkit 0.6.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X