如何从rake任务调用控制器操作?

问题描述:

我有一个控制器操作,生成一些excel报告,这需要大约10分钟的时间。有时我从我的webapp中调用它,这就是为什么它是一个动作。如何从rake任务调用控制器操作?

但我也想创建一个rake任务来运行它,所以我可以安排它自动运行一次。

任何方式来做到这一点?

+0

正如其他人所说的,您必须将代码移到模型中。在控制器上完成的东西是一种不好的做法。 – kikito 2010-03-25 08:52:45

您可以处理模型中的报告生成吗?模型should be doing most of the work anyway,可以从Rake任务访问:

task :reports => :environment do 
    ... 
    # Do stuff with your models. 
end 
+1

我不这么认为,我需要渲染XML模板来生成excel报告 – Janak 2010-03-24 13:25:14

我认为你必须将你的代码移入你的模型。由于在模型中使用输出渲染的知识并不好,因此我建议将所有业务逻辑和数据操作放入模型中,然后将渲染代码放入您的rake任务中。这将使耙子任务类似于网络上使用的控制器 - 保持关注点分离。

你可以看看ActionView :: Base并从那里开始工作,找出如何触发模板的渲染。