哪种方式使用Delayed_Job进行调度?

时间:2012-08-07 18:56:20

标签: ruby-on-rails ruby-on-rails-3 delayed-job

我在sql db中有一个列表拍卖项目在特定时间结束(到期)我正在寻找使用(Delayed :: Job.enqueue)在给定拍卖时触发方法的正确方法饰面。

1)在拍卖开始时加入内存的每次拍卖都使用工人

2)使用Web应用程序启动时加载的一个工作程序,定期查询数据库以查看是否有任何拍卖结束。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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