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"
monapplication.rb
le fichier. - inclus
gem 'pdfkit'
dans mon Gemfile et installé avec Bundler - définir l'
.pdf
type mime dans monmime_types.rb
initialiseur avecMime::Type.register_alias "application/pdf", :pdf
- ajouté
config.threadsafe!
deconfig/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):
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):
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):
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