销毁所有延迟的作业

问题描述 投票:31回答:3

我正在使用railide 2.3.8的collectionidea。我正在创建一系列延迟的工作执行一些任务,一段时间后,我想销毁所有正在运行的延迟作业。如果有人知道这样做的方法,请帮助我。

ruby-on-rails ruby delayed-job
3个回答
61
投票

您可以调用rake jobs:clear删除队列中的所有作业。


50
投票

除了rake任务之外,DelayedJob作业只是普通的ActiveRecord模型,因此,如果您使用的是Ruby代码,则可以使用它们执行所需的操作:

Delayed::Job.destroy_all
Delayed::Job.delete_all
Delayed::Job.find(4).destroy
# etc.

0
投票

听起来像您有一个父进程,如果其作业集在一定时间内未完成,则该进程要超时。在模型上设置标志以指示该过程已放弃,而不是依赖于作业本身的引用。如果不再需要,作业可以检查该标志并短路。 (您的Job类还应该在超时的情况下包装其#perform方法的内容。)

[似乎总是像建议的那样,试图坚持引用DJ对象几乎总是一个坏主意。

© www.soinside.com 2019 - 2024. All rights reserved.