2015-09-06 41 views
1

读取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 

回答

1

我不知道你是否已经看到这个指南:http://guides.rubyonrails.org/active_job_basics.html如果没有,请细看。

从你的描述,你可以实现你的目标是什么:

  • 做的第一请求,将调用控制器动作来生成报表,并使用回调“after_perform”更新与所产生的视图报告。
  • 拆分“询问报告”和“查看报告”中的报告。第一个将排队生成报告,一旦准备好就会在报告部分提供给用户。

如果您计划报告的生成时间将增加,或者如果用户等待报告的时间为30秒,我宁愿选择第二个选项。其他选项可能是在您获得所需数据后生成报告,因此当用户请求时已生成报告。 (只是猜测,因为我不知道你的应用程序流)

+0

我没有考虑活动作业,因为我的项目是在RoR 4.0.12上。也许是升级的时候了?我会看看这个指南,谢谢。 – adass