【问题标题】:How to fix 'Error while loading shared libraries: libpng12.so.0' (on dokku)如何修复“加载共享库时出错:libpng12.so.0”(在 dokku 上)
【发布时间】:2019-09-18 14:53:00
【问题描述】:

我在尝试通过生产环境中的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

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

【问题讨论】:

    标签: ruby-on-rails wkhtmltopdf ubuntu-18.04 dokku


    【解决方案1】:

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

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

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

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

    libpng12-0
    

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

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

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

    【讨论】:

      【解决方案2】:

      对于 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 的issue #3001,显然这个错误应该在 wkhtmltopdf 的 0.12.5 版本中修复。
      • 感谢您的帮助。我设法通过使用dokku-apt 插件在我的dokku 容器上安装libpng12 包来解决问题。
      猜你喜欢
      • 2013-10-27
      • 2016-12-20
      • 1970-01-01
      • 2021-05-10
      • 2020-01-24
      • 2023-03-26
      • 2012-09-06
      • 1970-01-01
      • 2021-07-31
      相关资源
      最近更新 更多