我正在尝试在我的应用程序中生成一些 PDF,该应用程序处理一些数据,然后创建结果的 PDF。我正在使用 PDFKit,因此只需创建一个 HTML 视图,如果我在控制器中就可以了,但我想使用 Sidekiq 将处理推送到后台线程中。
我曾计划使用render_to_string
,但由于它只是控制器的一部分,我无法在 Sidekiq 中使用它。
有什么办法可以做到这一点吗?我想尝试坚持使用 Sidekiq,但如果没有,我想我只需要在控制器内完成所有操作?
我正在尝试在我的应用程序中生成一些 PDF,该应用程序处理一些数据,然后创建结果的 PDF。我正在使用 PDFKit,因此只需创建一个 HTML 视图,如果我在控制器中就可以了,但我想使用 Sidekiq 将处理推送到后台线程中。
我曾计划使用render_to_string
,但由于它只是控制器的一部分,我无法在 Sidekiq 中使用它。
有什么办法可以做到这一点吗?我想尝试坚持使用 Sidekiq,但如果没有,我想我只需要在控制器内完成所有操作?
好的,我采用了不同的方法。
我创建了一个直接从工作类调用的抽象控制器,如此处所述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
更多详细信息可在此处获得
为什么不能在控制器中 render_to_string,将返回的 HTML 存储在变量中,将 HTML 传递给 sidekiq 作业?