【发布时间】:2013-11-12 01:30:33
【问题描述】:
我在 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 '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。
- 我们目前正致力于从 wicked_pdf 将写入临时文件的本地文件生成 pdf,并尝试从那里生成文件。
任何意见将不胜感激。
【问题讨论】:
-
它似乎找不到 ruby 可执行文件本身。我无法想象为什么这只会偶尔发生。 (例如,您不会碰巧在负载均衡器后面有四台机器?编辑:等等,这是 来自 ruby 的错误消息。
-
等一下,我只是重新阅读了您的问题-您可以!听起来其中一台机器没有正确安装 pdf 转换器。
-
您可以做的是 1) 尝试发现同一个节点是否每次都失败,以及 2) 尝试通过记录来发现命令 确实 工作时的样子出去。这应该指向一个解决方案。
-
是的,但是 pdf 转换器是与 bundler 一起安装的。我们已经在 4 个节点中的至少 3 个节点上运行了使用 wkhtmltopdf 的 wicked_pdf 生成代码,全部成功。这就是为什么它如此混乱。是的,我们整天都在用日志解决这个问题。我们似乎无法弄清楚。我们已经没有地方可看了。 :(
-
您是否可以选择一次关闭一个节点,直到问题消失,然后用一个好的节点的克隆覆盖坏节点?
标签: ruby-on-rails ruby pdf wkhtmltopdf wicked-pdf