Heroku 和 wicked-pdf --- libwkhtmltox.so.0 没有这样的文件

Heroku and wicked-pdf --- libwkhtmltox.so.0 No such file

我已经在我的 Rails 应用程序本地安装了 wicked_pdf,它正在生成 pdf。

当我将它推送到 Heroku 并尝试生成 pdf 时,我得到:

Command Error: /app/bin/wkhtmltopdf: error while loading shared libraries: libwkhtmltox.so.0: cannot open shared object file: no such file or directory

我是 运行 Arch。 wkhtmltopdf 是使用 pacman 安装的,并在 /usr/bin/wkhtmltopdf 和 /usr/lib64/libwkhtmltox.so.0

中生成了条目

wkhtmltopdf 被复制到 my_rails_app/bin/wkhtmltopdf,Heroku 似乎发现它没问题。

libwkhtmltox.so.0 已经复制到三个位置,Heroku 还是找不到。

  • my_rails_app/bin/libwkhtmltox.so.0
  • my_rails_app/lib/libwkhtmltox.so.0
  • my_rails_app/lib64/libwkhtmltox.so.0

    Heroku 在哪里需要这个文件?

    -- 编辑--

    测试 "wkhtmltopdf http://www.google.com google.pdf" 在我的本地机器上按预期执行(它生成一个 pdf 文件)。

    使用 "heroku run bash" 调出连接到我的 heroku 服务器的命令行;
    % which wkhtmltopdf
    => /app/bin/wkhtmltopdf

    % 其中 libwkhtmltox.so.0
    => /app/bin/libwkhtmltox.so.0

    % wkhtmltopdf http://www.google.com google.pdf
    => wkhtmltopdf: 加载共享库时出错: libwkhtmltox.so.0: 无法打开共享对象文件: 没有这样的文件或目录

  • 这个问题似乎与 Heroku 对容器的使用以及我的剪切和粘贴工作有关,移动的是符号链接而不是实际文件(请看图)。我要感谢 Arch 的仆从,他给了我我需要的指导,但它包含的评论暗指我的心智能力大大降低,并且惊讶于我什至可以安装 Arch,更不用说在它上面开发了。所以我有点舍不得给他信任。

    事实上,有了新信息,我的 google foo 找到了 https://github.com/dscout/wkhtmltopdf-buildpack 在删除了我之前的修复尝试和 arch pacman 下载后,这个构建包在 ruby gems 工作Arch pacman 失败了。

    我现在是一个快乐的白痴:-)

    wicked_pdf gem 主要依赖enter link description here 二进制 'wkhtmltopdf'

    在你的本地机器上执行命令 which wkhtmltopdf 。 它会告诉你它所在的路径。 在我的例子中,它位于 /usr/local/bin/wkhtmltopdf

    接下来在您的开发应用程序中,检查 wicked_pdf.rb 您必须已将 :exe_path 定义到上述位置。 您的语法必须看起来像这样:

    WickedPdf.config = {
      :exe_path => '/usr/local/bin/wkhtmltopdf'
    }
    

    当你移动到二进制文件之上的 heroku 时,它的路径配置将不起作用。

    这里有两个选择:

    第一种方式:来源:This article.

    在您的应用程序根目录中创建一个 bin 文件夹,并将二进制文件放入其中。 您的二进制文件将位于:project_root/bin/wkhtmltopdf-amd64

    然后link到:exe_path到这个位置。

    这可能有效(虽然没有尝试过)。

    缺点:在项目目录中有二进制文件不是一个好方法。更好的选择是将您的二进制文件放在 AWS 或任何云服务中并使用路径位置。

    第二种方式:(我实现了)

    我避免在 heroku 中使用这个二进制文件,并且没有提供对云服务的任何访问权限。 我使用了 wkhtmltopdf-heroku gem 此 gem 在内部使用相同的二进制文件 (wkhtmltopdf)。 检查此 gem(包含相同库)的 bin 文件夹。

    用法: 将以下 gem 添加到 Gemfile。

       gem 'wicked_pdf'
       gem 'wkhtmltopdf-heroku'
    
    
      config/initializers/wicked_pdf.rb
       #comment out all the :exe_path settings. 
       # our application will be using wkhtmltopdf-heroku gem
       #(which will handle the path settings)
    

    其余的 Mime 配置和 require 语句仍然有效。

    它确实对我有用。希望对你有帮助:)