3

我正在尝试在我的应用程序中生成一些 PDF,该应用程序处理一些数据,然后创建结果的 PDF。我正在使用 PDFKit,因此只需创建一个 HTML 视图,如果我在控制器中就可以了,但我想使用 Sidekiq 将处理推送到后台线程中。

我曾计划使用render_to_string,但由于它只是控制器的一部分,我无法在 Sidekiq 中使用它。

有什么办法可以做到这一点吗?我想尝试坚持使用 Sidekiq,但如果没有,我想我只需要在控制器内完成所有操作?

4

2 回答 2

5

好的,我采用了不同的方法。

我创建了一个直接从工作类调用的抽象控制器,如此处所述http://www.whatastruggle.com/generating-pdfs-in-background

不管怎么说,还是要谢谢你

编辑

似乎链接已经死了,所以总结一下有效的方法:

创建一个新的控制器,这将是渲染控制器

渲染控制器.rb

class RenderingController < AbstractController::Base
  include AbstractController::Rendering
  include ActionView::Layouts
  include AbstractController::Helpers
  include AbstractController::Translation
  include AbstractController::AssetPaths
  include Rails.application.routes.url_helpers
  include WickedPdf::PdfHelper

  self.view_paths = 'app/views'
end

然后无论您需要在哪里使用它

rc = RenderingController.new
rc.render_to_string(template: 'template/name', locals: { local: value })

请注意,如果您使用的是 Rails 5+,则不再需要这样做,因为它们启用了控制器之外的渲染。相反,您现在可以这样做:

ApplicationController.render :index

更多详细信息可在此处获得

于 2013-06-09T19:11:00.163 回答
0

为什么不能在控制器中 render_to_string,将返回的 HTML 存储在变量中,将 HTML 传递给 sidekiq 作业?

于 2013-11-28T17:39:55.570 回答