背景
在看完之后,我觉得Prawn已经出局了wkhtmltopdf . 看起来Rails的PDFKit和wicked_pdf宝石似乎是新的酷 . 所以我在how to use PDFKit上找到了Ryan的截屏视频 . 我安装了所有东西,在CLI上测试wkhtmltopdf没有问题,摆弄Rails设置运行多个进程,所以资产管道工作,一切看起来都很好,除了我仍然停留在过程的最后(实际上得到PDF来自服务器的响应) .
问题
当我请求 .pdf
版本的视图(我正在使用PDFKit中间件选项)时,我的浏览器就坐在那里等待响应,但是一旦我杀死了Rails进程,我希望得到的PDF只会弹出我的浏览器窗口 . 是什么赋予了?
我正在使用什么
-
OS:OSX 10.8.1
-
Rails:3.2.8
-
Ruby:1.9.3
-
wkhtmltopdf:0.11.0_rc1(虽然当我运行
wkhtmltopdf -V
时它表示0.10.0_rc2) -
qt:4.8.2
我做了什么
-
通过在我的
application.rb
文件中加载config.middleware.use "PDFKit::Middleware"
来使用PDFKit中间件 . -
在我的Gemfile中包含
gem 'pdfkit'
并使用Bundler安装它 -
使用
Mime::Type.register_alias "application/pdf", :pdf
在mime_types.rb
初始化程序中设置.pdf
mime-type -
为多个线程添加了
config.threadsafe!
到config/environments/development.rb
,因此资产管道与PDF引擎不冲突 -
测试
wkhtmltopdf http://www.google.com google.pdf
并按预期生成了Google主页的PDF -
尝试为wicked_pdf交换PDFKit并遇到了同样的问题(挂起,但是当Rails进程被杀死时,PDF会按预期呈现)
它看起来像什么
这是由Rails呈现的常规html页面(我已经模糊了客户端详细信息):
当我尝试导航到 localhost:3000/some/path.pdf
时,这是Rails的CLI输出 . (应用程序在等待响应时挂起):
当我最终使用 ctrl-c
杀死Rails进程时,PDF最终显示在浏览器中,因为我预期会看到它(CSS和HTML正确呈现,因此资产似乎加载正常):
结论到目前为止
为wicked_pdf交换PDFKit并获得相同的结果似乎让我觉得问题不在于那些库,而是与我的开发环境有关 . 但是wkhtmltopdf在命令行上运行良好,这让我觉得它和QT正在完成它们的工作 . 问题必须在Rails中 . 也许我没有正确配置?
请求帮助
如何确定问题到底是什么以及如何解决?
如果你能帮助我,我会爱你的<3
更新
我也尝试使用另一种渲染PDF的方法(使用 .to_pdf
)而没有中间件选项,如下所示(这样做我从 application.rb
文件中注释掉了 config.middleware.use "PDFKit::Middleware"
):
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
7 回答
我还挂着并打开了码头上的wkhtmltopdf图标 .
我实际上发现问题在于我只有1个独角兽工作进程在运行 . 一旦我添加超过1,它工作正常 .
我在OS X上使用pdfkit 0.6.2运行wkhtmltopdf 0.9.9
问题出在wkhtmltopdf本身,特别是0.9.9之后的任何版本 . wkhtmltopdf直接从命令行运行时挂起 .
纠正的步骤:
然后验证安装了正确的版本
wkhtmltopdf --version
哪个应该产生wkhtmltopdf 0.9.9
引文:
https://github.com/mileszs/wicked_pdf/issues/110
http://wearepandr.com/blog/article/homebrew-and-installing-old-package-versions#blog_nav
试试最新版本 . 在MacOS上安装的简便方法:
scarver2修复了我的广告宣传 . 但我需要一个更新版的
wkhtmltopdf
. 由于自制软件版本似乎仍然过时(它仍然挂在命令行上),并且由于最近没有可用的预编译二进制文件,我使用os x build脚本自行编译:我正在使用
pdfkit 0.6.2
和Rails 3.2.17
. 我将二进制文件放在/vendor
中,并在pdfkit
初始化程序中用config.wkhtmltopdf
指向它 . 到现在为止还挺好 .我遇到了同样的问题 . 当我在application.rb中添加:'config.threadsafe!'作为the stack中的答案时,它可以正常工作 . 希望这有帮助 .
完全相同的症状,但目前使用
WickedPdf
. 在这一点上,我认为问题也在于wkhtmltopdf
.不幸的是,我在Stack / Google中找到的建议都没有为我工作 . 相反,我需要结合几个建议,包括本文中的一些建议 .
解决方案是:
brew uninstall wkhtmltopdf
在
/usr/bin
中查找并删除wkhtmltopdf
的任何副本评论
WickedPdf.config
一行config/initializers
将
config.threadsafe!
添加到development.rb
删除中间件并允许主控制器的'show'动作来处理pdf请求(可能没有必要)
将
wkhtmltopdf-binary
添加到gemfile捆绑
重启服务器
您可能还需要将
Mime::Type.register_alias "application/pdf", :pdf
添加到config/initializers/mime_types.rb
(对我来说,这会导致'警告:已初始化常量PDF')我的设置是:Mac OSX Mountain Lion with Rails 3.2.1,Webrick,Postgres和wkhtmltopdf-binary(0.9.9.1) .
尝试按以下方式编辑
config/initializer/pdfkit.rb
: