背景
在阅读之后,在我看来,Prawn已经出局,wkhtmltopdf入局了。Rails 的PDFKit和wicked_pdf gem似乎是新的酷炫。所以我找到了Ryan关于如何使用 PDFKit的截屏视频。我安装了所有东西,在 CLI 上测试 wkhtmltopdf 没有问题,摆弄 Rails 设置以运行多个进程,以便资产管道工作,一切看起来都很好,除了我仍然卡在进程的最后(实际上是获取 PDF来自服务器的响应)。
问题
当我请求.pdf
视图的一个版本时(我正在使用 PDFKit 中间件选项),我的浏览器只是坐在那里等待响应,但是一旦我终止 Rails 进程,我希望得到的 PDF 才会在我的浏览器中弹出窗户。是什么赋予了?
我在用什么
- 操作系统:OSX 10.8.1
- 导轨:3.2.8
- 红宝石:1.9.3
- wkhtmltopdf: 0.11.0_rc1 (虽然当我运行
wkhtmltopdf -V
它说 0.10.0_rc2) - 数量:4.8.2
我做了什么
config.middleware.use "PDFKit::Middleware"
通过加载我的application.rb
文件来使用 PDFKit 中间件。- 包含
gem 'pdfkit'
在我的 Gemfile 中并使用 Bundler 安装它 - 在我的初始化程序中设置
.pdf
mime 类型mime_types.rb
Mime::Type.register_alias "application/pdf", :pdf
- 添加
config.threadsafe!
到config/environments/development.rb
多个线程,因此资产管道不会与 PDF 引擎冲突 - 经过测试
wkhtmltopdf http://www.google.com google.pdf
,它按预期生成了 Google 主页的 PDF - 尝试将 PDFKit 换成 wicked_pdf 并遇到了同样的问题(挂起,但是当 Rails 进程被杀死时,PDF 按预期呈现)
它看起来像什么
这是 Rails 呈现的常规 html 页面(我已经模糊了客户端细节):
这是我尝试导航到localhost:3000/some/path.pdf
. (应用程序在等待响应时挂起):
当我最终终止 Rails 进程时ctrl-c
,PDF 最终显示在浏览器中,正如我所期望的那样(CSS 和 HTML 正确呈现,因此资产似乎加载良好):
到目前为止的结论
将 PDFKit 替换为 wicked_pdf 并获得相同的结果似乎让我认为问题不在于这些库,而与我的开发环境有关。但是 wkhtmltopdf 在命令行下运行良好,所以这让我觉得它和 QT 正在做他们的工作。问题一定出在 Rails 上。也许我没有正确配置某些东西?
请求帮助
如何确定问题到底是什么以及如何解决?
如果你能帮助我,我会爱你<3
更新
我还尝试过使用另一种在没有中间件选项的情况下呈现 PDF(带有)的替代方法,如下所示(这样做我从我的文件.to_pdf
中注释掉了):config.middleware.use "PDFKit::Middleware"
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