I am trying to generate pdf and render it in production server.In local host everything works fine for me. No error while I am generating PDF. But in production getting this error.
RuntimeError (Failed to execute: ["/home/app/vendor/bundle/ruby/2.7.0/gems/wkhtmltopdf-binary-0.12.6.6/bin/wkhtmltopdf", "--page-size", "A4", "file:////tmp/wicked_pdf20240308-1479705-1jl9481.html", "/tmp/wicked_pdf_generated_file20240308-1479705-112vd26.pdf"] Error: PDF could not be generated! Command Error: pid 1483292 exit 1 /home/app/.rbenv/versions/2.7.6/lib/ruby/2.7.0/bundler/spec_set.rb:86:in'block in materialize': Could not find rake-13.0.6 in any of the sources (Bundler::GemNotFound)
In Gemfile I have used
gem 'rails', '~> 5.1.4'
gem 'wicked_pdf', '~> 2.8'
gem 'wkhtmltopdf-binary', '~> 0.12.6.6'
In Controller
respond_to do |format|
format.pdf do
render pdf: 'certificate',
template: 'payments/ripicle_receipt.html.haml',
layout: 'payments/accounting_pdf.html.haml',
delete_temporary_files: true,
page_size: 'A4'
config/initializers/wicked_pdf.rb file. I don't have setting in this file
On server: ruby 2.7.6p219, Bundler version 2.1.4, ubuntu 22.4
I use Rails c, I tried generate pdf file. It's ok. But I request on browser, it has error
Update
I use `rails s' to starting server. It work. But i start server by nginx-passenger, it has this error
Current maintainer of both WickedPDF and wkhtmltopdf-binary-gem here.
/home/app/vendor/bundle/ruby/2.7.0/gems/wkhtmltopdf-binary-0.12.6.6/bin/wkhtmltopdfis this Ruby script. It is invoking the top line!/usr/bin/env rubyto figure out which exact binary that is part ofwkhtmltopdf_binary_gemto execute on your production platform.So, when your Rails app shells out to invoke
wkhtmltopdf, the user it runs as often does not have the same Ruby environment as the application (your app runs in Bundler-managed environment, but a shell-script does not without extra setup, like installing and configuringrbenvfor that linux user, and configuring it to run in non-interactive shells.One way to fix this is to make sure your server also has
wkhtmltopdf_binaryinstalled as a system gem, but it might be difficult to get the version installed on the system to be in sync with the one in yourGemfile.lock.What I would suggest you do is either code in the path to the actual binary that is needed (not the Ruby binstub), or unpack & copy the correct binary into your application's
bin/directory, and change your WickedPDF config like so:config/initializers/wicked_pdf.rb
Or, you could install the system's package for
wkhtmltopdf(like apt-get install wkhtmltopdf), and pointexe_pathto there instead of using the gem.