I am using this guide for integrating wicked_pdf on heroku. But somehow it doesn't seem to work. I got the logs from heroku and its says this:
Processing PdfController#get_pdf to pdf (for 115.248.175.50 at 2011-02-15 23:54:44) [GET]
Parameters: {"format"=>"pdf", "action"=>"get_pdf", "id"=>"1", "controller"=>"pdf"}
***************WICKED***************
Rendering pdf/get_pdf
RuntimeError (PDF could not be generated!
/usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `exec': No such file or directory - /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64 - - (Errno::ENOENT)
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `popen3'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `fork'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `popen3'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `fork'
from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `popen3'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/wicked_pdf.rb:22:in `pdf_from_string'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:28:in `make_pdf'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:39:in `make_and_send_pdf'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:13:in `render'
from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/app/controllers/schedule_controller.rb:33:in `get_pdf'
Please Help. Thanks in Advance.
EDIT:
I made some changes in my code and got through this error but still stuck here
NoMethodError (undefined method empty? for #<Pathname:0x2b7112392480>)
How to get WickedPdf gem to work on Heroku
(see citation below for urls)
bin
in the root of your Rails app.wkhtmltopdf
binaries to the bin
folder. You will need the version for your development system and the AMD64 version for Heroku. Do not add to your git repo yet.bin
folder e.g. chmod +x bin/wkhtmltopdf-amd64
git add bin
wicked_pdf
to your Gemfile
and bundle install
. No other wkhtmltopdf gems are needed.config/initializers
folder called wicked_pdf.rb
with the source code below.git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
git push heroku
Your Rails project is now configured for Heroku. From here, add your program logic for PDF files.
** config/initializers/wicked_pdf.rb **
if Rails.env.production?
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
else
# Linux (check your processor for Intel x86 or AMD x64)
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-i386"
# OS X
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-0.9.9-OS-X.i386"
# Windows
# wkhtmltopdf_path = 'C:\Program Files/wkhtmltopdf/wkhtmltopdf.exe'
end
WickedPdf.config = { exe_path: wkhtmltopdf_path, wkhtmltopdf: wkhtmltopdf_path }
How I came to this conclusion:
For starters, there are SEVERAL misleading articles on the Web regarding wkhtmltopdf
, the wicked_pdf
gem, and Heroku
.
There are also issues with recent versions of wkhtmltopdf
(10.0+) that cause execution to hang.
Lastly, at some point there must have been a change in the config variable names for WickedPdf
because several articles reference :exe_path
while other articles reference :wkhtmltopdf
.
Even WickedPdf's GitHub documentation alternates between each variable.
My solution you do not need to compile wkhtmltopdf
from source.
You do not need to install wkhtmltopdf
from Homebrew. I provided the solution to this if you really want to brew install wkhtmltopdf
.
You also do not need to add any of the 'wkhtmltopdf' helper gems to your project. I tried wkhtmltopdf
, wkhtmltopdf-heroku
, wkhtmltopdf-engineyard
, wkhtmltopdf-binary
gems and GitHub repos. Worked great locally. No luck at Heroku.
From a Rails console on Heroku:
I investigated what CPU was running Heroku's servers by running RUBY_PLATFORM
which yielded "x86_64-linux"
.
I also peeked inside the bin
folder on Heroku by issuing the Dir.entries('bin')
to see what files actually exist there. I noticed some of the wkhtmltopdf
gems I was testing placed their executables in this folder. A clue!
I ran WickedPdf.new.pdf_from_string('Hello')
to see the output errors and test various WickedPdf configurations.
Then, in @barlow's answer to configuring PDFKit
, there is a subnote that gave the ultimate key. You must give Unix execute permissions to wkhtmltopdf
the binary before committing to Git. Bingo!
Cite:
At the time of this writing:
Amended 2/12/2015
dscout has developed a gem that encompasses the concepts of my answer. I recommend using the gem if your Heroku instance supports buildpacks.
Amended 3/27/2015
Another gem that works with Heroku (and Linux AMD64 OSes) wkhtmltopdf-heroku It auto-detects if pdfkit, wicked_pdf and wisepdf gems are installed.