无法让wicked_pdf在heroku上工作? (但它在本地工作)

时间:2011-05-19 06:45:12

标签: ruby-on-rails-3 heroku wkhtmltopdf

按照https://github.com/jordan-brough/heroku-pdf上的指南,我设法让wicked_pdf在本地工作并按预期创建PDF。 但是,一旦我推送到heroku,每次我调用pdf

时应用程序都会崩溃一段时间

日志给了我这个:

2011-05-19T06:36:56+00:00 app[web.1]: Started GET "/authors/cash_payment_receipt/4dd4aff0a2d5a5000100000c.pdf" for XXX.XXX.XXX.XXX at Wed May 18 23:36:56 -0700 2011
2011-05-19T06:36:56+00:00 heroku[router]: Error H13 (Connection closed without response) -> GET xxx.xxxx.com/authors/cash_payment_receipt/4dd4aff0a2d5a5000100000c.pdf dyno=web.1 queue=0 wait=0ms service=0ms bytes=0
2011-05-19T06:36:56+00:00 app[web.1]: !! Unexpected error while processing request: PDF could not be generated!
2011-05-19T06:36:56+00:00 app[web.1]: /app/.bundle/gems/ruby/1.8/gems/wkhtmltopdf-0.1.2/bin/wkhtmltopdf_linux_386: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory

我将wkhtmltopdf bin添加到我的rails-root / bin目录,检查权限,一切正常。我首先尝试了0.10rc2并向下移动到0.9.9,但它都给出了相同的结果。

我在google上找不到与我的错误有关的任何内容。我不明白我做错了什么。

环境是: - rails 3.0.7 - 红宝石1.8.7

谢谢,

啤酒

6 个答案:

答案 0 :(得分:8)

我最近为wkhtmltopdf二进制文件创建了一个GEM,可以在heroku上工作,而无需在自己的存储库中安装任何二进制文件。它还包含用于开发的OSX(darwin)二进制文件。它适用于PDFKit,也可能与WickedPDF一起使用

https://github.com/bradphelan/wkhtmltopdf-heroku

或在您的Gemfile中

gem "wkhtmltopdf-heroku"

答案 1 :(得分:5)

this github项目对我非常有帮助,我有它在rails 3项目中运行,感谢这个

答案 2 :(得分:4)

我能够按照此处描述的步骤https://github.com/jordan-brough/heroku-pdf制作我自己的项目副本,并且在本地和heroku上运行良好。

然后我更新了应用程序以使用rails 3.0.9。它在heroku http://heroku-pdf-3.heroku.com/上运行。您可以从here获取此项目的代码。

答案 3 :(得分:2)

为了记录,我已经体验过这在我们的舞台环境(同样的heroku设置)上完美运行的地方,但是部署到生产可以打破上面的错误(但并非总是如此)。

当发生这种情况时,重新部署工作(不明白为什么)。因为它是一个git repo,你将不得不做一个小改动,否则它将不允许你再次推动。

答案 4 :(得分:1)

wicked_pdf使用wkhtmltopdf将HTML转换为PDF(正如名称所示)。您可以下载其二进制here,并将其放在您的应用bin文件夹中。

您还需要创建一个指向二进制文件的wicked_pdf.rb初始值设定项:

# config/initializers/wicked_pdf.rb

WickedPdf.config = {
  :exe_path => Rails.root.join('bin', 'wkhtmltopdf-amd64').to_s,
}

但是,如果您需要在PDF文件中输入图像,则需要运行X服务器。由于您无法在Heroku中运行X服务器,因此有两种方法:

  • 使用xvfb将wkhtmltopdf二进制文件包装在虚拟X服务器环境中
  • 在另一台服务器中安装HTML到PDF提供程序,在那里您可以更灵活地使用,例如RackSpace或Amazon EC2中的VPS。

我更喜欢第二个选项,因为它在另一个服务器中分离PDF创建,并且不会因性能问题而损害应用程序的其余部分。

您可以在此处查看如何执行此操作:http://blog.hugerepo.com/2013/04/29/how-to-create-your-own-html-to-pdf-provider/

答案 5 :(得分:0)

我遇到了同样的问题。我通过使用whtmltopdf二进制文件的amd64版本而不是i386来修复它。