使用delayed_job进行respond_to PDF调用

时间:2014-08-26 07:54:50

标签: ruby-on-rails delayed-job

在一个控制器中,我有一个respond_to块,用这样的wicked_pdf创建一个PDF:

respond_to do |format|
  format.html
  format.pdf do
    render pdf: "pdf",
      template:          'users/show.pdf.haml',
      print_media_type:  true,
      orientation:       'Portrait',
      page_size:         'A4',
      disposition:       'attachment'
  end
end

这很好用,但是我想用delayed_job将它移到后台作业。我已经设置delayed_job,它运行正常。例如,现在通过添加delay

来发送通知电子邮件
Notifier.new(@user).delay.send_email

如何为PDF执行此操作?我试图将渲染块移动到一个单独的方法并在其上调用delay,但它不会作为延迟作业执行:

respond_to do |format|
  format.html
    format.pdf do
      render_pdf.delay
    end
  end
end

1 个答案:

答案 0 :(得分:1)

从控制器渲染响应是即时的并阻止I / O.你不能按照自己的想法实现这一目标。相反,您可以将pdf生成移至后台作业,并向用户发出通知,例如“PDF将很快通过电子邮件发送”。在延迟作业中完成PDF生成后,您只需通过电子邮件发送延迟作业的PDF文件。

respond_to do |format|
  format.html
  format.pdf do
    render_pdf.delay
    redirect_to some_path, 'PDF will be sent soon by email'
  end
end

需要在延迟作业中添加逻辑以提供PDF。