关于Rails上的ruby:在heroku上实现邪恶的pdf的问题

problem implementing wicked pdf on heroku

我正在使用本指南将wicked_pdf集成到heroku上。但是它似乎不起作用。我从heroku那里得到了日志,它说:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Processing PdfController#get_pdf to pdf (for 115.248.175.50 at 2011-02-15 23:54:44) [GET]
  Parameters: {"format"=>"pdf","action"=>"get_pdf","id"=>"1","controller"=>"pdf"}
***************WICKED***************
Rendering pdf/get_pdf

RuntimeError (PDF could not be generated!
/usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `exec': No such file or directory - /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64       - -  (Errno::ENOENT)
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `popen3'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `fork'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `popen3'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `fork'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `popen3'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/wicked_pdf.rb:22:in `pdf_from_string'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:28:in `make_pdf'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:39:in `make_and_send_pdf'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:13:in `render'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/app/controllers/schedule_controller.rb:33:in `get_pdf'

请帮助。在此先感谢。

编辑:

我对代码进行了一些更改,并通过了此错误,但仍然停留在这里

NoMethodError (undefined method empty? for #<Pathname:0x2b7112392480>)


如何使WickedPdf gem在Heroku上运行

(有关网址,请参见下面的引文)

  • 在Rails应用程序的根目录中创建一个名为bin的文件夹。
  • wkhtmltopdf二进制文件的0.9.9版下载并提取到bin文件夹中。您将需要开发系统的版本和Heroku的AMD64版本。暂时不要添加到您的git仓库中。
  • bin文件夹中为每个二进制文件设置执行权限,例如chmod +x bin/wkhtmltopdf-amd64
  • 现在git add bin
  • wicked_pdf添加到您的Gemfilebundle install中。不需要其他wkhtmltopdfruby。
  • 在下面的源代码的config/initializers文件夹中创建一个名为wicked_pdf.rb的文件。
  • git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
  • git push heroku
  • 您的Rails项目现已配置为Heroku。在这里,添加您的PDF文件程序逻辑。

    ** config / initializers / wicked_pdf.rb **

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if Rails.env.production?
      wkhtmltopdf_path ="#{Rails.root}/bin/wkhtmltopdf-amd64"
    else
      # Linux (check your processor for Intel x86 or AMD x64)
      # wkhtmltopdf_path ="#{Rails.root}/bin/wkhtmltopdf-amd64"
      # wkhtmltopdf_path ="#{Rails.root}/bin/wkhtmltopdf-i386"
      # OS X
      wkhtmltopdf_path ="#{Rails.root}/bin/wkhtmltopdf-0.9.9-OS-X.i386"            
      # Windows
      # wkhtmltopdf_path = 'C:\\Program Files/wkhtmltopdf/wkhtmltopdf.exe'
    end

    WickedPdf.config = { exe_path: wkhtmltopdf_path, wkhtmltopdf: wkhtmltopdf_path }

    我如何得出这个结论:

    对于初学者来说,网上有很多关于wkhtmltopdfwicked_pdf gem和Heroku的误导性文章。
    wkhtmltopdf(10.0)的最新版本也存在一些问题,这些问题会导致执行挂起。

    最后,在某些时候,WickedPdf的配置变量名称必须进行了更改,因为几篇文章引用了:exe_path,而其他文章引用了:wkhtmltopdf
    甚至WickedPdf \\的GitHub文档也在每个变量之间交替显示。

    我的解决方案,您无需从源代码编译wkhtmltopdf
    您不需要从Homebrew安装wkhtmltopdf。如果您真的想brew install wkhtmltopdf,我提供了解决方案。
    您也不需要将任何\\'wkhtmltopdf \\'帮助程序gem添加到您的项目中。我尝试了wkhtmltopdfwkhtmltopdf-herokuwkhtmltopdf-engineyardwkhtmltopdf-binary gems和GitHub存储库。在当地工作出色。 Heroku没有运气。

    在Heroku上的Rails控制台中:
    我通过运行RUBY_PLATFORM产生了"x86_64-linux"来调查了运行Heroku服务器的CPU。
    我还通过发出Dir.entries('bin')来查看Heroku上的bin文件夹,以查看其中实际存在的文件。我注意到我正在测试的某些wkhtmltopdf gems将其可执行文件放在此文件夹中。线索!
    我运行WickedPdf.new.pdf_from_string('Hello')来查看输出错误并测试各种WickedPdf配置。

    然后,在@barlow \\对配置PDFKit的回答中,有一个给出最终键的子注释。在提交到Git之前,必须授予Unix对wkhtmltopdf二进制文件的执行权限。宾果游戏!

    引用:

  • 官方wkhtmltopdf旧版静态二进制文件http://wkhtmltopdf.org/old-downloads.html
  • wicked_pdf https://github.com/mileszs/wicked_pdf
  • Barlow \\的PDFKit.config https://stackoverflow.com/a/5098984/307308
  • 如何使用Homebrew`https://stackoverflow.com/a/14043085/307308安装wkhtmltopdf
  • 在撰写本文时:

    • rails(3.2.13)
    • wicked_pdf(0.9.6)
    • wkhtmltopdf(0.9.9)

    由2/12/2015修订

    dscout开发了一个包含我答案概念的ruby。如果您的Heroku实例支持buildpacks,我建议使用gem。

    • https://github.com/dscout/wkhtmltopdf-buildpack
    • https://devcenter.heroku.com/articles/buildpacks

    由2015年3月27日修订

    与Heroku(和Linux AMD64 OS)配合使用的另一颗rubywkhtmltopdf-heroku
    它会自动检测是否已安装pdfkit,wicked_pdf和wisepdf gem。


    在查看您的" Edit"部分,对于#<Pathname:0x2b...>

    来说,它说"未定义的方法为空?"?

    这意味着您在某个地方用空吗?函数在路径上的对象,而为空?是字符串而不是路径的函数。

    尝试找出您在哪里使用了路径对象,并在该对象上使用to_s。

    尝试一下。


    如果将wkhtmltopdf的本地副本添加到您的仓库中,则可以在初始化程序中指向它。

    1
    2
    3
    PDFKit.configure do |config|
    config.wkhtmltopdf ="#{RAILS_ROOT}/lib/wkhtmltopdf"
    end

    在存储之前,请记住在回购中chmod x您的wkhtmltopdf副本-git添加它

    希望这会有所帮助。


    在以下位置寻找wicked_pdf二进制文件:/app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64

    并且不存在,将二进制文件放入应用程序的文件夹中,然后将文件config/initializers/wicked_pdf.rb更改为包括:

    1
    :exe_path =>"#{Rails.root}/path/to/wkhtmltopdf-amd64"

    如果wicked_pdf创建文件,您可能会遇到的另一个问题是仅读取Heroku文件系统,因此,除非您找到一种方法来告诉wicked_pdf在tmp目录中创建pdf,否则您可能无法使用它。