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的名称,例如:
然后,在根项目目录中创建另一个名为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中有一些问题。
- 感谢你的回复。我尝试更改为wkhtmltopdf-heroku gem,但是它引发了上面的错误:Failed to execute: ["/app/vendor/bundle/ruby/2.5.0/bin/wkhtmltopdf","-q","https://google.com","/app/public/wicked_pdf_generated_file20190918-9-d35rl0.pdf"??] Error: PDF could not be generated! Command Error: QSslSocket: cannot resolve CRYPTO_num_locks QSslSocket: cannot resolve CRYPTO_set_id_callback QSslSocket: cannot resolve CRYPTO_set_locking_callback QSslSocket: cannot resolve sk_free QSslSocket: cannot resolve sk_num (...)
-
真奇怪看起来像是SSL问题。您可以尝试从本地html文件生成pdf吗?
-
我创建了一个简单的html文件进行测试。它正常工作。使用pdf_from_string方法也可以正常工作。关于如何解决SSL问题的任何想法?
-
显然,此错误应根据wkhtmltopdf的问题#3001在wkhtmltopdf的0.12.5版本中修复。
-
您可以尝试在您的环境中重新安装libssl软件包。否则,请尝试较低版本的wkhtmltopdf
-
我尝试过较低版本的wkhtmltopdf,它们也会引发此错误。重新安装libssl软件包可能是一个修复程序,但是我不知道如何在dokku容器上执行此操作。你能给我一些指示吗?
-
嗨@LucasVieira对不起,我对Dokku并不熟悉:/但是,如果您可以访问Dockerfile,则应该可以使用apt-get命令安装其他软件包。参见stackoverflow.com/questions/40273087/…
-
感谢您的帮助。我设法通过使用dokku-apt插件在我的dokku容器上安装了libpng12软件包来解决了这个问题。