Ruby on rails 如何处理延迟作业的循环

Ruby on rails 如何处理延迟作业的循环,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我在延迟作业中添加pdf生成任务,如下所示 @employe.each do |em| em.details.each do |detail| Delayed::Job.enqueue GeneratePdf.new(detail) end end 这很好,但需要2分钟的时间来遍历所有员工及其详细信息,并完成请求 我怎样才能减少这段时间?或者如何添加循环延迟作业。我的当前生成pdf类 class GeneratePdf <

我在延迟作业中添加pdf生成任务,如下所示

@employe.each do |em|
        em.details.each do |detail|
          Delayed::Job.enqueue GeneratePdf.new(detail)
        end
      end
这很好,但需要2分钟的时间来遍历所有员工及其详细信息,并完成请求

我怎样才能减少这段时间?或者如何添加循环延迟作业。我的当前生成pdf类

class GeneratePdf < Struct.new(:detail)
  def perform
    filename =  detail.id.to_s
    pdf = EmployeDetailsPdf.new(detail) #this generates a pdf
    pdf.render_file(filename + ".pdf")
  end
end
class GeneratePdf
首先,我假设您的
@employe
变量应该被称为
@employees
,并且只存储以下内容:几个雇员

通常只应将对象的id传递给作业。作业将查询数据库以检索员工。这不要紧,如果需要更长的时间,这就是工作的目的

这样,您就可以将主要工作量传递给作业:

# some_controller
@employees.pluck(:id).each { |id| Delayed::Job.enqueue(id) }

# generate_pdf_job.rb
class GeneratePdf < Struct.new(:id)
  def perform
    employee = Employee.find(id)

    employee.details.each do |detail|
      pdf = EmployeDetailsPdf.new(detail)
      pdf.render_file(detail.id.to_s + ".pdf")
    end
  end
end
#一些#控制器
@employees.pluck(:id).each{id|Delayed::Job.enqueue(id)}
#生成\u pdf\u job.rb
类GeneratePdf
首先,我假设您的
@employe
变量应该被称为
@employees
,并且只存储以下内容:几个雇员

通常只应将对象的id传递给作业。作业将查询数据库以检索员工。这不要紧,如果需要更长的时间,这就是工作的目的

这样,您就可以将主要工作量传递给作业:

# some_controller
@employees.pluck(:id).each { |id| Delayed::Job.enqueue(id) }

# generate_pdf_job.rb
class GeneratePdf < Struct.new(:id)
  def perform
    employee = Employee.find(id)

    employee.details.each do |detail|
      pdf = EmployeDetailsPdf.new(detail)
      pdf.render_file(detail.id.to_s + ".pdf")
    end
  end
end
#一些#控制器
@employees.pluck(:id).each{id|Delayed::Job.enqueue(id)}
#生成\u pdf\u job.rb
类GeneratePdf
您不能在延迟作业中传递员工,并在GeneratePdf中的执行操作中传递循环吗?是的,但在这种情况下,整个循环一次运行,所有PDF一次生成,因为整个过程仅被视为一个作业。如果没有帮助的话,您是否可以在延迟的_作业中传递员工,并在GeneratePdf中的执行操作中循环?是的,但在这种情况下,整个循环一次运行,所有PDF一次生成,因为整个过程被视为一个作业。不过也没用