Rails: 运行wkhtmltopdf出错 -- (加载共享库时出错)

67
当我的应用程序运行(或我从命令行运行)wkhtmltopdf命令时,我会收到以下错误:(在命令行中显示)
#> wkhtmltopdf 
wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory

我注意到这个库确实在/usr/lib文件夹中,但不在/lib文件夹中。它在哪个文件夹并不重要吗?有没有什么方法让它识别出来?

#> ls -l /usr/lib/libXrender.so*
lrwxrwxrwx 1 root root    19 Feb 17 07:20 /usr/lib/libXrender.so -> libXrender.so.1.3.0
lrwxrwxrwx 1 root root    19 Feb 17 07:20 /usr/lib/libXrender.so.1 -> libXrender.so.1.3.0
-rwxr-xr-x 1 root root 39184 Jan 29  2010 /usr/lib/libXrender.so.1.3.0

#> ls -l /lib/libXrender.so*
ls: cannot access /lib/libXrender.so*: No such file or directory

我也检查了该库的依赖项。

# ldd /usr/lib/libXrender.so.1
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00002b9cb5afd000)
    libc.so.6 => /lib/libc.so.6 (0x00002b9cb5e04000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00002b9cb6143000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00002b9cb6347000)
    libdl.so.2 => /lib/libdl.so.2 (0x00002b9cb654d000)
    /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)

这在一个EngineYard gentoo服务器上运行。


对于 Google 用户:现在最好通过使用提供的操作系统包(例如 deb 包)来安装 wkhtmltopdf,该包会自动安装 libXrender 以及其他所需的依赖项。下载链接:https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5 - Masood Khaari
12个回答

146

Unix软件包x11-libs/libXext和x11-libs/libXrender是依赖项

Gentoo:

sudo emerge libXext libXrender

PDFkit的维基页面更详细地解释了如何在Engine Yard上使wkhtmltopdf工作。

PDFkit维基页面

Debian或Ubuntu:

sudo apt-get install libxrender1

那篇帖子有说明,但我注意到它引用了i386版本,所以我改成了引用amd64版本,然后它就起作用了...所以我更新了维基,包括64位实例的说明。 - Ben
1
这对我有效!不过在Debian上我还需要运行 sudo apt-get install libext6 - Jon G - Megaphone Tech
在Debian 11上,我需要运行sudo apt-get install libxrender1 libxext-dev - xfra35

38

我在Debian Squeeze,amd64上遇到了同样的问题。安装libxrender1解决了我的问题。

sudo apt-get install libxrender1

31

我还需要做以下事项:

sudo apt-get install libfontconfig1

13

今天在一台运行静态版本wkhtmltopdf的RHEL7机器上遇到了这个问题。解决方法是安装几个依赖项:

yum install libXrender libXext fontconfig 

2
在我的电脑上执行此操作后,显示的是黑色方块而非文本。我不得不安装以下两个软件包才能使文本正常工作:xorg-x11-font-utilsxorg-x11-fonts-Type1 - Efekan

8

在Ubuntu 16中(从全新的Docker安装开始):

apt install -y libxrender1 libxext6

8
如果你的系统是64位,并且你的软件需要32位的库,你需要添加标志“i386”,例如在ubuntu中:
sudo apt-get install libxrender1:i386

4

我遇到了完全相同的问题!对我来说,解决方案是安装64位版本的wkhtmltoimage。


2
我在重建一个容器后遇到了这个问题,而以前一切正常。我在网上找到的所有答案都对我没用,所以这是我是如何进行故障排除和解决的:
1. 检查是否所有依赖项都存在:
ldd path/to/your/binary/file/wkhtmltopdf-amd64
这是我从中得到的信息
linux-vdso.so.1 =>  (0x00007ffded169000)
libXrender.so.1 => not found
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f117bab0000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f117b806000)
libXext.so.6 => not found
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f117b4cc000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f117b2b2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f117b0ae000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f117aea6000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f117ac89000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f117a907000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f117a5fe000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f117a3e8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f117a01e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f117bcf3000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f1179df5000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f1179bd0000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f11799ae000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f11797aa000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f11795a4000)

当我看到“not found”时,意味着缺少依赖项。
2. 更新apt,因为它很可能找不到需要安装的库。
apt-get update 现在,我安装了上面结果中带有“not found”的缺失依赖项。请注意,对于libxrender和libxext,我需要安装libxrender-dev和libxext-dev。
apt-get install -y libxrender-dev libxext-dev

1

使用sudo apt-get install xvfb命令来安装依赖包。

更新node-modules wkhtmltopdf index.js文件。

将'wkhtmltopdf.command = 'wkhtmltopdf';'更改为'wkhtmltopdf.command = 'xvfb-run wkhtmltopdf';'


1

我在Ubuntu 18.04生产服务器上运行Rails 5.2应用程序时遇到相同的问题,问题是服务器缺少对libXrender的依赖。

以下是我的解决方法:

运行以下命令来搜索缺失的依赖项:

sudo apt-cache search libXrender

这将在下方显示输出:

libxrender-dev - X Rendering Extension client library (development files)
libxrender1 - X Rendering Extension client library
libreoffice - office productivity suite (metapackage)

如果您正在运行生产服务器,只需安装libxrender1(用于呈现PDF)即可:
sudo apt-get install libxrender1

此外,如有可能,请在您的服务器上运行过时库的升级:
sudo apt upgrade

完成所有这些步骤后,只需重新启动您的应用程序服务器(如果您的应用程序服务器是puma并且已为服务器设置了systemd):

sudo systemctl restart puma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接