ho w 和 phi x "=10="(在 dokku 上)

How to fix 'Error while loading shared libraries: libpng12.so.0' (on dokku)

我在尝试通过生产中的 pdf_from_url 方法生成 pdf 时遇到了一些问题。 错误如下:

Error: PDF could not be generated!
 Command Error: /app/vendor/bundle/ruby/2.5.0/gems/wkhtmltopdf-binary-edge-0.12.5.0/libexec/wkhtmltopdf-linux-amd64: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

下面的行抛出了上面的错误:

   pdf = WickedPdf.new.pdf_from_url("https://google.com", {:temp_path => Rails.root.join('public')})

该错误仅在生产时出现。开发时一切正常。

运行 wkhtmltopdf https://google.com test.pdf 通过服务器上的命令行正常工作。

需要注意的一件事是我的应用程序服务器在 dokku 容器上运行,我对它没有经验。所以,可能是由于 dokku 的文件架构的工作方式导致的错误。

我已经尝试过的:

  1. 将 wkhtmltopdf 的 gem 从 wkhtmltopdf-binary 更改为 wkhtmltopdf-binary-edge
  2. 在服务器上手动安装了 libpng12(不是在 dokku 容器上)

我目前使用的是:

wicked_pdf gem 版本:1.1.0

whtmltopdf [提供商 gem]:wkhtmltopdf-binary-edge ~> 0.12.5

platform/distribution 和版本:Dokku 容器 运行 Ubuntu 18.04

对于 ubuntu 18.04 你应该试试

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

(即使它说的是 heroku,它应该适用于大多数 ubuntu 18.04 环境)

wkthmltopdf-binary-edge 不能在开发环境之外使用。

如果 heroku gem 不适合您,您可以尝试将 wkhtmltopdf-binary-edge 降级到 0.12.4 或 0.12.3。我相信 0.12.5 二进制文件与 18.04 有一些问题。

我设法通过使用 dokku-apt 插件安装 libpng12 解决了这个问题。

首先,在你的 dokku 容器上安装 dokku-apt 插件:

sudo dokku plugin:install https://github.com/F4-Group/dokku-apt

然后,在您的项目根目录中创建一个名为 apt-packages 的文件,并插入库的名称,例如:

libpng12-0

之后,在您的项目根目录中创建另一个名为 apt-repositories 的文件,并插入以下行来更新您的存储库:(记得留下一个文件末尾的空行)

deb http://security.ubuntu.com/ubuntu xenial-security main

最后,将这些文件提交并部署到您的 dokku 容器中,它应该可以工作了。