wkhtmltopdf在战争中不能从wicked-pdf执行

时间:2013-04-03 18:54:05

标签: ruby-on-rails jruby wicked-pdf warbler

我正在尝试使用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

2 个答案:

答案 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

仅此而已。

我希望这会有所帮助