Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使后台作业生成的文件可供下载_Ruby On Rails_Ruby_Ruby On Rails 3_Whenever - Fatal编程技术网

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

Ruby on rails 使后台作业生成的文件可供下载,ruby-on-rails,ruby,ruby-on-rails-3,whenever,Ruby On Rails,Ruby,Ruby On Rails 3,Whenever,我的控制器中有一个操作,根据选择的日期范围(开始和结束日期)生成站点使用情况报告,条件是开始和结束日期必须在当前季度内 我想实现一个后台作业,该作业将在每个季度末生成此报告,并将其作为查看页面上的链接下载 每个季度为3个月,因此,例如,在3月31日11:59 PM,我希望它生成从1月1日到3月31日的站点使用情况报告,并可在查看页面中下载 如果可能的话,我更喜欢在任何时候使用,,因为我已经在使用它以确定的时间间隔重新索引模型。欢迎所有可能的建议 请帮我做这件事 您可以添加类ReportGener

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

我想实现一个
后台作业
,该作业将在每个季度末生成此报告,并将其作为查看页面上的链接下载

每个季度为3个月,因此,例如,在
3月31日11:59 PM
,我希望它生成从1月1日到3月31日的站点使用情况报告,并可在查看页面中下载

如果可能的话,我更喜欢在任何时候使用
,因为我已经在使用它以确定的时间间隔重新索引模型。欢迎所有可能的建议


请帮我做这件事

您可以添加类ReportGenerator并在rails runner中使用它。此类将计算日期范围,生成报告并保存在应用程序的公共目录下。您必须注意,公共目录中的每个文件都是任何人都可以访问的。如果您不想获得访问此文件的某些授权,您可以将其放入其他目录中,例如-unpublic,并使用Apache的X-Sendfile http头通过您的应用程序(auth-purpose)为其提供服务

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

我建议使用Gems(2.1适用于rails3.0+),或者创建后台作业,将它们放在多个队列中,稍后再处理它们。两者都有很好的铁路司机。

谢谢你的帮助。。。我没有报表模型,我有控制器和视图。在控制器中,我定义了一个方法tht接受两个日期,并生成一个xls报告,以便在提交时在窗口中下载。我怎样才能像你提到的那样把它作为背景呢。。你能解释一下吗?我没有提到任何报告模型。只是一个Ruby类,没有ActiveRecord,它与您的控制器操作相同,但有一点不同。你没有明确地传递日期范围,只传递了四分之一个数字。然后添加类似于每隔3.6个月{runner“ReportGenerator.new(:quater=>Date.today.month/3).generate“}