Ruby on rails 如何处理延迟作业的循环
我在延迟作业中添加pdf生成任务,如下所示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 <
@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一次生成,因为整个过程被视为一个作业。不过也没用