如何修复'Error while loading shared libraries: libpng12.so.0'(在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宝石版本:1.1.0

whtmltopdf [provider gem]:wkhtmltopdf-binary-edge ~> 0.12.5

平台/发行版和版本:运行在 Ubuntu 18.04 上的 Dokku 容器

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

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

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

然后,在根项目目录上创建一个名为apt-packages的文件,并插入 lib 的名称,如下所示:

libpng12-0

之后,在根项目目录上创建另一个名为apt-repository的文件,并插入以下行以更新仓库:(记得在文件末尾留一个空行(

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

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

我设法通过从 deb 文件安装 libpng12-0 来解决这个问题。

wget -q -O libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb && sudo dpkg -i libpng12.deb && rm libpng12.deb

对于 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 有一些问题。

相关内容

最新更新