我正在尝试使用Ruby On Rails中的wicked-pdf创建一个pdf。它在开发模式下运行良好,但是当我在生产中部署时,我得到错误:
wkhtmltopdf is not executable
我的wkhtmltopdf可执行文件位于:
rails_root/bin/wkhtmltopdf-i386
Warbler设置为在战争中包含bin文件夹:
config.includes = FileList["classes/*","bin/*"]
我已将邪恶的pdf配置为在正确的位置找到bin:
WickedPdf.config = {
:exe_path => Rails.root.join('bin', 'wkhtmltopdf-i386').to_s
}
我运行warbler然后在jBoss应用服务器上部署战争。当我尝试生成PDF时,我收到有关它不可执行的错误。它在开发模式下运行良好 - 而不是在战争中。
二进制文件的权限应该没问题:
-rwxr-xr-x 1 username group 11446024 Apr 3 11:40 wkhtmltopdf-i386
我尝试使用wkhtmltopdf-binary gem而不是手动包含wkhtmltopdf二进制文件。这在开发模式下也运行良好,但Wicked PDF无法在生产中找到二进制文件。
更新:我在生产模式下将wicked-pdf配置更改为指向'wkhtmltopdf-binary'gem提供的二进制文件。它也会出现wkhtmltopdf is not executable
错误。该路径最终为:jboss-5.1.0.GA/server/default/tmp/3j001-3g0fg5-hf2xi49o-1-hf2xiuld-9q/myrailsapp.war/WEB-INF/gems/gems/wkhtmltopdf-binary-0.9.9.1/bin/wkhtmltopdf_linux_386
答案 0 :(得分:5)
你是单独安装wkhtmltopdf还是允许你的gem文件安装它?
我会做以下事情:
gem 'wicked_pdf', '~> 0.9.10'
gem 'wkhtmltopdf-binary', '~> 0.9.9'
然后设置配置:
WickedPdf.config = {
exe_path: "#{ENV['GEM_HOME']}/gems/wkhtmltopdf-binary-#{Gem.loaded_specs['wkhtmltopdf-binary'].version}/bin/wkhtmltopdf_linux_386"
}
如果您要更改gem的版本,此位#{Gem.loaded_specs['wkhtmltopdf-binary'].version}
会查询您的宝石以查找当前版本,您的prod服务器仍然可以找到正确的文件夹。
答案 1 :(得分:0)
在 Ubuntu 18.04 上使用 Rails 5.2.3 应用程序时,我遇到了同样的问题。
显示的错误是这样:
Gem :: Exception:找不到gem wkhtmltopdf-binary的可执行文件wkhtmltopdf。 wkhtmltopdf-binary当前未包含在捆绑软件中,也许您打算将其添加到Gemfile中?
这是我的解决方法:
我只是将wkhtmltopdf-binary宝石添加到已经在Gemfile中包含wkhtmltopdf-heroku的生产组中。
group :production do
gem 'wkhtmltopdf-heroku'
gem 'wkhtmltopdf-binary'
end
然后安装了宝石
bundle install --without development test
如果您在生产服务器上运行,请尽力安装libxrender1库,因为它是wkhtmltopdf的依赖项(用于呈现PDF),以避免呈现PDF时出错。
sudo apt-get install libxrender1
仅此而已。
我希望这会有所帮助