gpt4 book ai didi

ruby-on-rails - 运行时错误(无法执行)PDF 无法使用 wkhtmltopdf-binary 生成 wicked_pdf

转载 作者:数据小太阳 更新时间:2023-10-29 07:34:10 24 4
gpt4 key购买 nike

我在 stackoverflow 上寻找其他解决方案,但似乎都没有合适的答案。所以我会尽量具体一些。

我们在 Ruby 2.0 和 Rails 4 上的 Ruby on Rails 应用程序中使用 wicked_pdf (0.9.7) 和 wkhtmltopdf-binary (0.9.9.1)

当我们克隆存储库并启动服务器时,我们的代码在本地运行,但是当我们推送到生产环境(4 个节点)时,它偶尔可以工作。

这是我们得到的错误:

INFO: ***************WICKED***************
Rendered application/index.pdf.haml within layouts/pdf (209.2ms)
Rendered application/_header.pdf.haml within layouts/pdf (1.5ms)
Completed 500 Internal Server Error in 3406ms
FATAL: RuntimeError(Failed to execute:\n"/opt/application/releases/5405db831e02eb2987cc06b243333776ce9c34b8ab6db3e58e93f39c3f933621/vendor/bundle/ruby/2.0.0/bin/wkhtmltopdf" -q --header-html "file:////tmp/wicked_header_pdf20131031-15836-12qkok6.html" --footer-right "[page] of [topage]" --footer-font-size 9 --margin-top 50 --encoding "UTF-8" "file:////tmp/wicked_pdf20131031-15836-b874ab.html" "/tmp/wicked_pdf_generated_file20131031-15836-1ibji4k.pdf" \nError: PDF could not be generated!\n Command Error: /usr/bin/env: ruby: No such file or directory\n)
vendor/bundle/ruby/2.0.0/gems/wicked_pdf-0.9.7/lib/wicked_pdf.rb:69:in `rescue in pdf_from_string'
vendor/bundle/ruby/2.0.0/gems/wicked_pdf-0.9.7/lib/wicked_pdf.rb:73:in `pdf_from_string'
vendor/bundle/ruby/2.0.0/gems/wicked_pdf-0.9.7/lib/pdf_helper.rb:63:in `make_pdf'
vendor/bundle/ruby/2.0.0/gems/wicked_pdf-0.9.7/lib/pdf_helper.rb:76:in `make_and_send_pdf'
vendor/bundle/ruby/2.0.0/gems/wicked_pdf-0.9.7/lib/pdf_helper.rb:21:in `render_with_wicked_pdf'

这是应用程序中的相关代码:

gem 文件

gem 'wicked_pdf', '~> 0.9.7'
gem 'wkhtmltopdf-binary', '~> 0.9.9'

Gemfile.lock

wicked_pdf (0.9.7)
rails
wkhtmltopdf-binary (0.9.9.1)

controller.rb

def show
render pdf: file_name,
layout: 'pdf',
margin: {
top: 30
},
header: {
html: {
template: '_header.pdf.haml'
}
},
footer: {
right: I18n.t('pdf.page_description'),
font_size: 9
},
encoding: 'UTF-8'
end
  • 我们已经在服务器上直接使用 bundle exec 运行(成功地)了 wkhtmltopdf,但是当我们点击该页面时,大约有 3/4 的时间会出现 500 错误。
  • 我们还在 Rails 控制台中成功运行了它。
  • 我们已经使用基本的 wkhtmltopdf 从网页生成 pdf。
  • 我们目前正致力于从本地文件生成 pdf,wicked_pdf 会写入临时文件并尝试从那里生成文件。

如有任何意见,我们将不胜感激。

最佳答案

问题是 wkhtmltopdf 正在执行一个 shell 脚本来确定要使用的二进制文件的版本,但由于 apache 没有 shell(并且有充分的理由)而失败。解决方案是显式设置二进制文件。

由于我们的开发、暂存和生产环境各不相同,我们创建了一个在 Rails 应用程序中执行的 RBConfig 脚本(无需 shell 访问权限):

require 'rbconfig'

if RbConfig::CONFIG['host_os'] =~ /linux/
arch = RbConfig::CONFIG['host_cpu'] == 'x86_64' ? 'wkhtmltopdf_linux_x64' : 'wkhtmltopdf_linux_386'
elsif RbConfig::CONFIG['host_os'] =~ /darwin/
arch = 'wkhtmltopdf_darwin_386'
else
raise "Invalid platform. Must be running Intel-based Linux or OSX."
end

WickedPdf.config = {
exe_path: "#{ENV['GEM_HOME']}/gems/wkhtmltopdf-binary-#{Gem.loaded_specs['wkhtmltopdf-binary'].version}/bin/#{arch}"
}

还有其他几种方法可以做到这一点。例如,在本地开发,您的用户应该具有 shell 访问权限,在这种情况下,您实际上只需要为您的生产环境显式设置二进制文件:

if Rails.env.production?
WickedPdf.config = { ... }
end

或者,正如我们所做的那样,设置我们的厨师配置以使用适当的二进制文件设置我们所有的环境。它还让我们确保安装了生产所需的所有字体。

关于ruby-on-rails - 运行时错误(无法执行)PDF 无法使用 wkhtmltopdf-binary 生成 wicked_pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com