关于ruby on rails:如何修复’加载共享库时出错:libpng12.so.0′(在dokku上)

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

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

1
2
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

波纹管抛出以上错误:

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

该错误仅在生产中发生。一切正常进行开发。

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

要注意的一件事是,我的应用程序服务器运行在我没有经验的dokku容器上。因此,可能由于dokku的文件体系结构的工作方式而导致错误。

我已经尝试过的方法:

  • 将wkhtmltopdf \\的gem从wkhtmltopdf-binary更改为wkhtmltopdf-binary-edge
  • 在服务器上手动安装了libpng12(不在dokku容器上)
  • 我当前正在使用什么:

    wicked_pdfruby版本:1.1.0

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

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


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

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

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

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

    1
    libpng12-0

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

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

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


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