【问题标题】:How to implement DelayedJob custom job for Prawn PDF rendering?如何为 Prawn PDF 渲染实现 DelayedJob 自定义作业?
【发布时间】:2015-03-16 10:02:08
【问题描述】:

我正在尝试使用 DelayedJob 来渲染 Prawn PDF。按照文档中的自定义工作代码,我想出了这个:

 /lib/jobs/pdf_handling.rb

 RenderPdf = Struct.new( :id, :view_context ) do
   def perform
     user = User(id)
     pdf  = UserFolder.new( id, view_context )
     name = "user_folder_report.pdf"
     send_data pdf.render, filename: name, type: "application/pdf"
  end
end

PagesController.rb

def user_folder
  respond_to do |format|
    format.pdf do
      Delayed::Job.enqueue RenderPdf.new(@user, view_context)
    end
  end
end

这会导致错误:

 uninitialized constant PagesController::RenderPdf

在 PagesController 顶部添加所需的 RenderPdf 没有帮助。

我错过了什么?如何实现这一点,以便通过 DelayedJob 生成 PDF?谢谢。

更新

当 /jobs 移动到 /apps 下时,错误变为:

 can't dump anonymous module: #<Module:0x007fca7a3ae638>

/application.rb

 config.autoload_paths += Dir["#{config.root}/lib/assets/"]

更新

我变了

  class RenderFolder < Struct.new( :type, :rating_id, :dis, :view_context )
    def perform

 class RenderFolder < ActiveJob::Base
   def perform(...)

然后,使用 ActiveJob,您可以这样做

 RenderFolder.perform_later(...)

这似乎有效...我仍在实施。

【问题讨论】:

    标签: ruby-on-rails-4 delayed-job prawn


    【解决方案1】:

    lib 文件夹不再默认加载到 rails 中。您可以将其添加到autoload_path 或(我会做的)只是将它放在某个app/xxx 文件夹中。通常,我有app/support 或任意实用程序类的东西。

    【讨论】:

    • 我最初在 app/jobs 中有它。但是得到了同样的错误。我会将它移出 lib 并重试。
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2022-01-09
    • 2020-04-06
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多