Rails:运行 wkhtmltopdf 时出错 --(加载共享库时出错)
当我的应用程序运行时(或当我从命令行运行时) wkhtmltopdf 命令时,我收到以下错误:(从命令行显示)
#> wkhtmltopdf
wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
我注意到该 lib 确实位于 /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
我还检查了 lib 的依赖关系,
# 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 服务器上运行
When my app runs (or when I run from commandline) the wkhtmltopdf command I get the following error: (showing it from command line)
#> wkhtmltopdf
wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
I noticed the lib is indeed in the /usr/lib
folder but not the /lib
folder. Does it matter which one of these it is in? Is there any way to get it to recognize it?
#> 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
I also checked dependencies of the lib
# 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)
This is running on an EngineYard gentoo server
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
Unix 软件包 x11-libs/libXext 和 x11-libs/libXrender 是依赖项
Gentoo:
PDFkit wiki 还更详细地解释了如何让 wkhtmltopdf 在引擎码上工作。
PDFkit wiki
Debian 或 Ubuntu:
The Unix packages x11-libs/libXext and x11-libs/libXrender are dependencies
Gentoo:
PDFkit wiki also explains in more detail how to get wkhtmltopdf working on engine yard.
PDFkit wiki
Debian or Ubuntu:
我在 Debian Squeeze、amd64 上也遇到了同样的问题。安装 libxrender1 为我解决了这个问题。
I had the same, issue on Debian Squeeze, amd64. Installing libxrender1 solved the issue for me.
之后我还需要做:
I need also do after:
今天在运行 静态版本 wkhtmltopdf 的 RHEL7 计算机上遇到了这个问题。解决方案是安装一些依赖项:
Ran into this today on a RHEL7 machine running the static version of wkhtmltopdf. Solution was to install a few dependencies:
对于 Ubuntu 16(来自全新的 Docker 安装):
With Ubuntu 16 (from a fresh Docker install):
如果您的系统是 64 位,并且您的软件需要 32 位库,则需要添加标志“i386”,
例如在 ubuntu 上:
If your system is 64 bits, and your software requires 32 bits libs, you need to add the flag "i386",
for example on ubuntu:
我遇到了完全相同的问题!对我来说,解决方案是安装 64 位版本的 wkhtmltoimage。
I was having the exact same problem! The solution, to me, was to install the 64bit version of wkhtmltoimage.
我在重建我的一个容器后遇到了这个问题,而在此之前一切都工作正常。我在网上找到的所有答案都不适合我,所以以下是我的故障排除和解决方法:
1。检查所有依赖项是否都存在:
ldd path/to/your/binary/file/wkhtmltopdf-amd64
这是我从中得到的结果
“未找到”意味着依赖项丢失
2. apt更新并安装
更新你的apt,因为它很可能找不到安装所需的库
apt-get update
现在我安装了缺少的依赖项,其中“未找到”以上结果。请注意,对于
libxrender
和libxext
我必须安装libxrender-dev
和libxext-dev
。apt-get install -y libxrender-dev libxext-dev
I had this issue after rebuilding one of my containers, while before everything was working fine. All the answers I found online didn't work for me, so here's how I troubleshooted and resolved:
1. Check if all dependencies are there:
ldd path/to/your/binary/file/wkhtmltopdf-amd64
Here's what I got from that
Where I got "not found" means the dependencies were missing
2. apt update and install
Update your apt, as it's likely it won't find the libraries needed to install
apt-get update
Now I installed the missing dependencies that had the "not found" in the results above. Take note that for the
libxrender
andlibxext
I had to installlibxrender-dev
andlibxext-dev
.apt-get install -y libxrender-dev libxext-dev
我在 Ubuntu 18.04 生产服务器上运行 Rails 5.2 应用程序时遇到了同样的问题,问题是服务器上缺少
libXrender
的依赖项这是我解决它的方法 :
运行以下命令来搜索缺少的依赖项:
这将显示以下输出:
如果您在生产服务器上运行,只需仅安装
libxrender1
(用于渲染 PDF):另外,如果可能的话在您的服务器上运行过时库的升级:
完成所有这些后,只需重新启动您的应用程序服务器(如果您的应用程序服务器是 puma 并且您为该服务器设置了 systemd):
I had this same issue on running a Rails 5.2 application on an Ubuntu 18.04 production server, the issue was that there were missing dependencies for
libXrender
on the serverHere's how I solved it:
Run the command below to search for the missing dependencies:
This will display the output below:
If you're running on a production server, simply install
libxrender1
only (for rendering PDFs):Also, if possible run upgrades for outdated libraries on your server:
Once all these have been completed, simply restart your application server (If your application server is
puma
and if your setup systemd for the server):安装依赖包。
更新节点模块 wkhtmltopdf index.js
to install the dependency package.
Update the node-modules wkhtmltopdf index.js
在 Amazon Linux 上对我有用的东西(用于未来的谷歌搜索) 2018:03
What worked for me (for future google searchs), on an Amazon Linux 2018:03
请注意,wkhtmltopdf 有一个以 UPX 压缩格式分发的可执行版本,ldd 和 file 都会报告该文件是静态链接的,即使有效负载需要共享库。
要检查尝试,
如果您看到任何“UPX”id 字符串,请安装 upx 并在文件副本上使用“upx -d”(因为 upx 可以正常工作),然后在未压缩的文件上运行 ldd。
Note that there is an executable version of wkhtmltopdf distributed in a UPX compressed format, ldd and file will both report that this file is statically linked even though the payload requires shared libraries.
To check try
If you see any "UPX" id strings then install upx and use "upx -d" on a copy of the file (as upx works in place) and then run ldd on the uncompressed file.