2012-08-07 57 views
1

我有一个列表拍卖在一个特定的时间结束(到期)的数据库项目,我正在寻找正确的方法来使用(Delayed :: Job.enqueue)触发一个方法时,给定的拍卖结束。使用Delayed_Job进行调度的方法是什么?

1)使用工人,每被加载到内存拍卖时,拍卖开始

2)使用时加载一个工人的时候,看看哪些定期查询数据库的Web应用程序开始,如果任何拍卖已经结束。

有没有比上面列出的2更好的方法?

回答

2

您可以使用run_at并分别对每个项目进行排队,以便在添加到数据库时在每个项目结束时唤醒它们。那么你只需要一名工人,在某些事情结束之前,这些工人不会做任何工作。 (或者,更准确地说,你想ñ工人,其中N是你期望的,或者要处理的同时关闭的数目。)

auction.delay(:run_at => auction.ending_at).post_end_work 

如果无法排队的拍卖时,它添加到数据库中(如果通过无法访问DelayedJob的东西添加它),那么您将希望使用一位工作人员在最后X个时间段内扫描数据库中的ending_at值,其中X是运行频率你的工人。 (以及ending_at上的索引。)

我强烈建议不要在每次拍卖中使用单独的工作人员。

+0

Cyber​​fox,这是你所推荐的?现在看来,电子邮件的发送方式是在以后的日子。任何理由不这样做? Delayed :: Job.enqueue(Finish.new(auction),3,7.days.from_now) – 2012-08-08 00:43:47

相关问题