首页 文章

PDF渲染挂起rails 4服务器

提问于
浏览
0

我有一个Rails应用程序,我需要将其中一个视图呈现为可下载的PDF . 视图本身由许多部分组成,而部分又由更多部分组成,依此类推 . 这是顶级视图:

<meta charset="utf-8" />
<%= javascript_include_tag "jquery-ui.min", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "report", media: "all", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag "report_style", media: "all", "data-turbolinks-track" => true %>
<div class="report">
    <%= render partial: "details", locals: { examinee: @examinee, te: @test_event } %>
    <div class="page-break"></div>
    <%= render partial: "grades", locals: { scores: @test_event.scores, tasks: Task.tasks_for_report(@test_event.language) } %>
    <div class="page-break"></div>
    <%= render partial: "ld", locals: { test_event: @test_event } %>
    <%= render partial: "review", locals: { test_event: @test_event } %>
    <div class="page-break"></div>
    <%= render partial: "appendix" %>
</div>

由于渲染视图的复杂性,我更喜欢从html生成PDF,而不是两次写入,一次是.html.erb,另一次是pdf.erb .

我已经尝试了pdfkit和wickedpdf,但在这两种情况下我都失败了:

pdfkit 让我的瘦服务器被绞死,无论我尝试了什么 - 没有任何解决方案建议hereherehere有任何影响,事情仍然很糟糕 .

wicked_pdf 实际上已设法生成PDF,但是它再次忽略了我的所有css和js代码,即使用 wicked_pdf_javascript_include_tag 及其相应的css双子调用 . 这不可能因为我需要我的分页符和各种js脚本创建的所有内容(例如,由 chartist 创建的一些图) .

有任何想法吗?

1 回答

  • 0

    如果您使用单线程Web服务器(如 webrick )运行Rails,并且您的PDF生成过程涉及从您应用程序中的另一个 endpoints (如JavaScript中的AJAX)获取数据,那么它将陷入僵局,因为请求用于构建PDF的资产排列在PDF的实际构建之后 .

    它应该在 生产环境 中工作得很好,因为大多数 生产环境 环境都设置为运行多个Web工作者(有乘客或独角兽等),但要在开发模式下正确测试,您需要配置应用程序以运行多个Web工作者,所以你的Ajax请求可以在另一个线程中发生并返回到你的主要请求 .

    我建议你将 puma gem添加到你的 Gemfile ,并使用 rails server Puma --workers 3 运行你的开发服务器(顺便说一句,默认情况下,puma包含在新的Rails 5应用程序中,因为人们对ActionCable请求有同样的问题) .

    wicked_pdf_javascript_include_tag 用于从磁盘读取以获得构建PDF的额外速度,并且确实存在一些库的问题,并且根据您的配置,可能需要在 config.assets.precompile 列表中命名您的JS和CSS .

相关问题