在阅读Running Rails jobs in background threads之后,我尝试重构一个控制器操作,该操作基本上以xml格式呈现报告,并将报告文件发送到用户浏览器。现在该动作运行c。 30秒,所以我认为这是一个很好的候选人。 Hovewer,我遇到了一个问题:似乎我无法从新线程中访问报告erb模板。
这是我对线程的第一次尝试,我不确定我是否能够通过该方法完成重构。
重构前的简化操作代码:
@orders = Order.onrange(range).includes(:logo => [:simulations, :pantones])
respond_to do |format|
format.xml {
orders_xml = render_to_string template: 'orders/bom'
send_data orders_xml, filename: "BOM raport - #{range.to_s}.xml"
}
end
答案 0 :(得分:1)
我不知道您是否已经看过本指南:http://guides.rubyonrails.org/active_job_basics.html如果没有,请仔细查看。
根据您的描述,您可以通过以下方式实现目标:
如果你计划报告生成时间会增加,或者让用户等待30秒报告是不可接受的,我宁愿选择第二个选项。其他选项可能是在您拥有所需数据后生成报告,因此当用户要求它时,它已经生成。 (只是猜测,因为我不知道你的申请流程)