在一个控制器中,我有一个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
答案 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。