Après avoir lu autour de moi, il m'a semblé que Prawn est sorti et wkhtmltopdf est entré. Il semble également que le PDFKit et wicked_pdf les gemmes pour Rails sont le nouveau cool. J'ai donc trouvé un screencast de Ryan sur comment utiliser PDFKit . J'ai tout installé, testé wkhtmltopdf sur la CLI sans aucun problème, manipulé les paramètres Rails pour exécuter plusieurs processus afin que le pipeline d'actifs fonctionne, et tout semblait bien aller, sauf que je suis toujours bloqué à la toute fin du processus PDF réponse du serveur).
Lorsque je demande une version .pdf
de ma vue (j'utilise l'option PDFKit Middleware), mon navigateur reste dans l'attente d'une réponse, mais dès que je tue les Rails, je traite PDF I attendu que alors seulement apparaît dans la fenêtre de mon navigateur. Ce qui donne?
wkhtmltopdf -V
, il est écrit 0.10.0_rc2)config.middleware.use "PDFKit::Middleware"
dans mon fichier application.rb
.gem 'pdfkit'
inclus dans mon Gemfile et installé avec Bundler.pdf
mime-type dans mon initialiseur mime_types.rb
avec Mime::Type.register_alias "application/pdf", :pdf
config.threadsafe!
à config/environments/development.rb
pour plusieurs threads afin que le pipeline d'actifs n'entre pas en conflit avec le moteur PDFwkhtmltopdf http://www.google.com google.pdf
et généré comme prévu un PDF de la page d'accueil GoogleVoici la page html standard rendue par Rails (j'ai brouillé les détails du client):
Il s'agit de la sortie de la CLI par Rails lorsque j'essaie d'accéder à localhost:3000/some/path.pdf
. (l'application se bloque en attendant une réponse):
Lorsque je supprime enfin le processus Rails avec ctrl-c
, le PDF s'affiche enfin dans le navigateur tel que je m'attendais à le voir (CSS et HTML restitués correctement, les ressources semblent donc se charger correctement):
Echanger PDFKit pour wicked_pdf et obtenir les mêmes résultats me laisse penser que le problème ne concerne pas ces bibliothèques, mais que cela a un rapport avec mon environnement de développement. Mais wkhtmltopdf fonctionne correctement en ligne de commande, ce qui me laisse penser que QT et lui font leur travail. Le problème doit être dans Rails. Peut-être que je ne configure pas correctement quelque chose?
Comment puis-je déterminer quel le problème est exact et comment le résoudre?
Je t'aimerai si tu peux m'aider <3
J'ai également essayé d'utiliser une méthode alternative pour rendre le PDF (avec .to_pdf
) sans l'option de middleware comme suit (en procédant ainsi, j'ai commenté config.middleware.use "PDFKit::Middleware"
à partir de mon fichier 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
Le problème vient de wkhtmltopdf lui-même, en particulier de toute version postérieure à 0.9.9. wkhtmltopdf se bloque lorsqu'il est exécuté 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
Puis vérifiez que la version correcte est installée wkhtmltopdf --version
, ce qui devrait donner wkhtmltopdf 0.9.9
Citations:
Essayez la dernière version. Le moyen facile d'installer sur MacOS:
brew install Caskroom/cask/wkhtmltopdf
Le correctif de scarver2 a fonctionné pour moi comme annoncé. Mais il me fallait une version plus récente de wkhtmltopdf
. Étant donné que la version homebrew semble toujours obsolète (elle est toujours suspendue à la ligne de commande) et qu’aucun fichier binaire précompilé récent n’est disponible, j’ai utilisé le script os x build pour le compiler moi-même:
$ 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
J'utilise pdfkit 0.6.2
avec Rails 3.2.17
. Je mets le binaire dans /vendor
et, dans un initialiseur pdfkit
, je le pointe avec config.wkhtmltopdf
. Jusqu'ici tout va bien.
J'ai le même problème. Cela fonctionne quand j'ai ajouté: 'config.threadsafe!' dans application.rb comme réponse dans la pile . J'espère que cette aide.
Exactement les mêmes symptômes mais en utilisant WickedPdf
pour le moment. À ce stade, j'estime que le problème réside également dans wkhtmltopdf
.
Malheureusement, aucune des recommandations que j'ai pu trouver dans Stack/Google n'a fonctionné pour moi. Au lieu de cela, je devais combiner plusieurs suggestions, y compris celles trouvées dans ce post.
La solution était:
brew uninstall wkhtmltopdf
wkhtmltopdf
dans /usr/bin
WickedPdf.config
ligne dans config/initializers
config.threadsafe!
à development.rb
wkhtmltopdf-binary
à gemfileMime::Type.register_alias "application/pdf", :pdf
à config/initializers/mime_types.rb
(pour moi, cela provoque " avertissement: constante déjà initialisée PDF ').Ma configuration était: Mac OSX Mountain Lion avec Rails 3.2.1, Webrick, Postgres et wkhtmltopdf-binary (0.9.9.1).
Le mien était également suspendu et ouvrait l'icône wkhtmltopdf dans le dock.
En fait, j'ai constaté que le problème était que je n'avais qu'un seul processus de travail Unicorn en cours d'exécution. Une fois que j'en ai ajouté plus d'un, cela a bien fonctionné.
J'exécute wkhtmltopdf 0.9.9 sur OS X avec pdfkit 0.6.2