【问题标题】:wkhtmltopdf is not executable from wicked-pdf within warwkhtmltopdf 在战争中不能从 wicked-pdf 执行
【发布时间】:2013-03-25 14:37:59
【问题描述】:

我正在尝试使用来自 Ruby On Rails 的 wicked-pdf 创建一个 pdf。它在开发模式下运行良好,但是当我在生产中部署时出现错误:

wkhtmltopdf is not executable

我的 wkhtmltopdf 可执行文件位于:

rails_root/bin/wkhtmltopdf-i386

Warbler 已设置为在 war 中包含 bin 文件夹:

config.includes = FileList["classes/*","bin/*"]

我已将 wicked pdf 配置为在正确的位置找到垃圾箱:

WickedPdf.config = {
  :exe_path => Rails.root.join('bin', 'wkhtmltopdf-i386').to_s
}

我运行 warbler,然后在 jBoss 应用服务器上部署 war。当我尝试生成 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

【问题讨论】:

  • 您是否在远程服务器上安装了wkhtmltopdf
  • 我在 rails 目录中有 wkhtmltopdf 二进制文件,并包含在 war 中。我能够让它工作的唯一方法是将wkhtmltopdf二进制文件放在war之外的某个地方。
  • @lightswitch05 看起来你有双 /gems -- 那是正确的目录吗?如果您更新您的 exe_path 以从我下面的答案中取出示例中的 /gems,那可能会起作用。

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


【解决方案1】:

我在 Ubuntu 18.04 上使用 Rails 5.2.3 应用程序时遇到了同样的问题。

显示的错误是这样的:

Gem::Exception: 找不到 gem wkhtmltopdf-binary 的可执行 wkhtmltopdf。 wkhtmltopdf-binary 目前未包含在捆绑包中,也许您打算将其添加到您的 Gemfile 中?

我是这样解决的

我只是将wkhtmltopdf-binary gem 添加到Gemfile 中已经有wkhtmltopdf-heroku 的生产组。

group :production do
 gem 'wkhtmltopdf-heroku'
 gem 'wkhtmltopdf-binary'
end

然后安装gem

bundle install --without development test

如果您在生产服务器上运行,请尽量安装 libxrender1 库,因为它是 wkhtmltopdf 的依赖项(用于渲染 PDF),以避免在渲染 PDF 时出错。

sudo apt-get install libxrender1

就是这样。

我希望这会有所帮助

【讨论】:

    【解决方案2】:

    您是单独安装 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.loaded_specs['wkhtmltopdf-binary'].version} 查询您的 gem 以查找当前版本,如果您要更改 gem 的版本,您的 prod 服务器仍然能够找到正确的文件夹。

    【讨论】:

    • 我最终在服务器之外安装了 wkhtmltopdf。下次我在那台机器上时,我会尝试你的建议,如果可行,我会更新你。
    • 哇!我没有意识到这需要多长时间才能回答。谢谢你,萨迪,这让我发疯了。我之前下载了二进制文件并拉取/bin,但这似乎是“正确”的方式(或者至少是我正在寻找的方式)。我将把它添加到 wicked_pdf 文档中。
    • 谢谢@lightswitch05!
    • 两个快速更新:1) 这可能会在 spring 下中断,因为它将 ENV['GEM_HOME'] 清除为 ''。 2)相反,您可以尝试完全注释掉 :exe_path 。这是讨论:github.com/mileszs/wicked_pdf/pull/346
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2023-03-18
    • 2017-04-13
    相关资源
    最近更新 更多