Rails: Error running wkhtmltopdf -- (error while loading shared libraries)
Ruby on-RailsPdf GenerationWkhtmltopdfRuby on-Rails Problem Overview
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
Ruby on-Rails Solutions
Solution 1 - Ruby on-Rails
The Unix packages x11-libs/libXext and x11-libs/libXrender are dependencies
Gentoo:
sudo emerge libXext libXrender
PDFkit wiki also explains in more detail how to get wkhtmltopdf working on engine yard. PDFkit wiki
Debian or Ubuntu:
sudo apt-get install libxrender1
Solution 2 - Ruby on-Rails
I had the same, issue on Debian Squeeze, amd64. Installing libxrender1 solved the issue for me.
sudo apt-get install libxrender1
Solution 3 - Ruby on-Rails
I need also do after:
sudo apt-get install libfontconfig1
Solution 4 - Ruby on-Rails
Ran into this today on a RHEL7 machine running the static version of wkhtmltopdf. Solution was to install a few dependencies:
yum install libXrender libXext fontconfig
Solution 5 - Ruby on-Rails
If your system is 64 bits, and your software requires 32 bits libs, you need to add the flag "i386",
for example on ubuntu:
sudo apt-get install libxrender1:i386
Solution 6 - Ruby on-Rails
With Ubuntu 16 (from a fresh Docker install):
apt install -y libxrender1 libxext6
Solution 7 - Ruby on-Rails
I was having the exact same problem! The solution, to me, was to install the 64bit version of wkhtmltoimage.
Solution 8 - Ruby on-Rails
> sudo apt-get install xvfb
to install the dependency package.
Update the node-modules wkhtmltopdf index.js
> wkhtmltopdf.command = 'wkhtmltopdf'; to 'wkhtmltopdf.command = > 'xvfb-run wkhtmltopdf';'
Solution 9 - Ruby on-Rails
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 server
Here's how I solved it:
Run the command below to search for the missing dependencies:
sudo apt-cache search libXrender
This will display the output below:
libxrender-dev - X Rendering Extension client library (development files)
libxrender1 - X Rendering Extension client library
libreoffice - office productivity suite (metapackage)
If you're running on a production server, simply install libxrender1
only (for rendering PDFs):
sudo apt-get install libxrender1
Also, if possible run upgrades for outdated libraries on your server:
sudo apt upgrade
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):
sudo systemctl restart puma
Solution 10 - Ruby on-Rails
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
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)
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
and libxext
I had to install libxrender-dev
and libxext-dev
.
apt-get install -y libxrender-dev libxext-dev
Solution 11 - Ruby on-Rails
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
strings
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.
Solution 12 - Ruby on-Rails
What worked for me (for future google searchs), on an Amazon Linux 2018:03
yum localinstall -y https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/Packages/libpng15-1.5.30-7.el8.x86_64.rpm
yum localinstall -y https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.amazonlinux2.x86_64.rpm