使后台作业生成的文件可供下载

时间:2011-12-16 07:25:01

标签: ruby-on-rails ruby ruby-on-rails-3 whenever

我的控制器中有一个操作,根据所选日期范围(开始日期和结束日期)生成网站使用情况报告,条件是开始日期和结束日期必须在当前季度内。

我希望实现一个background job,它将在每个季度末生成此报告,并将其作为视图页面上的链接下载。

每个季度都是3个月,例如 - 在March 31st 11:59 PM,我希望它从1月1日到3月31日生成网站使用情况报告,并在视图页面中提供下载。

如果可能,我更喜欢使用whenever gem,因为我已经使用它以一定的间隔重新索引模型。欢迎所有可能的建议!!

请帮我解决这个问题!!

2 个答案:

答案 0 :(得分:2)

我建议使用Gems DelayedJob(2.1 for Rails 3.0+)或Resque来创建后台作业,将它们放在多个队列中,然后再处理它们。两者都有很好的Railscast。

答案 1 :(得分:1)

您可以添加类ReportGenerator并在rails runner中使用它。该课程将计算一个日期范围,生成报告并保存在您申请的公共目录下。您必须注意,任何人都可以访问公共目录中的每个文件。如果你没有授权访问这个文件,你可以放入其他目录,例如 - unpublic,并通过你的app(auth目的)使用X-Sendfile http头为Apache提供服务。

ReportGenerator.new(:quater => 4).generate

识别你有哪个季度:

quaters => {
  1 => "definition of 1st quater (date ranges)",
  2 => "definition of 2nd quater (date ranges)",
  3 => "definition of 3rd quater (date ranges)",
  4 => "definition of 4th quater (date ranges)".
}
quater = Date.today.month / 3