我有一个控制器动作,可以生成一些 Excel 报告,这大约需要 10 分钟的时间。有时我会从我的 Web 应用程序中调用它,这就是为什么它是一个动作的原因。
但是我也想创建一个 Rake 任务来运行它,这样我就可以自动安排每晚运行一次。
有什么方法可以做到这一点吗?
但是我也想创建一个 Rake 任务来运行它,这样我就可以自动安排每晚运行一次。
有什么方法可以做到这一点吗?
你能处理从你的模型生成报告吗?模型应该承担大部分工作,并且可以从Rake任务中访问:
task :reports => :environment do
...
# Do stuff with your models.
end
我认为您需要将代码移至模型中。由于在模型中放置有关输出呈现的知识是不好的,因此建议将所有业务逻辑和数据操作放在模型中,然后将呈现代码放在rake任务中。这将使rake任务类似于Web上使用的控制器-维护关注点的分离。
您可以查看ActionView :: Base并从那里开始工作,以找出如何触发模板的呈现。