你如何在Rails中实现触发器?

时间:2012-01-04 20:15:37

标签: ruby-on-rails performance triggers state

我的问题似乎不是一个独特的问题。基本上我有一个相当昂贵的过程需要定期运行,但只有当用户触发某个状态时。

例如,我有一个“问卷”系统,我分析结果并提供分析建议。分析和提出建议是一个昂贵的过程,有时10到20秒,并且随着数据集的增加可能会增加。顺便说一句,我目前正在研究提高此算法性能的方法。

我对此的想法是为该用户实现一个状态,表明分析/建议已过期,轮询此状态以及是否已过期运行昂贵的过程。然后,当用户填写问卷时,我会将此状态设置为已过期。

我目前的系统是rails 3.0,ruby 1.9.2,以及在EC2服务器上运行的MySQL。我目前正在使用DelayedJob将此进程推送到后台作业,但我还没有实现状态/触发器。

总而言之,我的问题是1)在这种情况下,这甚至是正确的架构吗? 2)我可以使用哪些宝石或实现与Rails一起使用?

1 个答案:

答案 0 :(得分:1)

您可以构建一个快速rake任务来检查需要分析的问卷调查和排队作业以便与DJ一起处理。然后,您可以使用Clockwork以预定义的时间间隔运行rake任务。

因为您使用的是EC2,所以您无需为运行轻量级Clockwork流程支付任何额外费用,并且您的rake任务可以轻松地继承与您的应用程序相同的环境,而不会有被HTTP请求触发的风险。