【发布时间】:2012-03-29 19:06:03
【问题描述】:
我正在为 rails 2.3.8 使用collectiveidea。我正在创建一系列延迟的工作 执行一些任务,一段时间后我想销毁所有正在运行的延迟作业。 如果有人知道如何做到这一点,请帮助我。
【问题讨论】:
标签: ruby-on-rails ruby delayed-job
我正在为 rails 2.3.8 使用collectiveidea。我正在创建一系列延迟的工作 执行一些任务,一段时间后我想销毁所有正在运行的延迟作业。 如果有人知道如何做到这一点,请帮助我。
【问题讨论】:
标签: ruby-on-rails ruby delayed-job
您可以调用rake jobs:clear 删除队列中的所有作业。
【讨论】:
rake jobs:clear 之后,工作人员也停止了该特定工作。
听起来您有一个父进程,如果其作业集未在特定时间内完成,则该进程希望超时。与其挂在作业本身的引用上,不如在模型上设置一个标志,表明该过程已放弃。如果不再需要,作业可以检查该标志和短路。 (您的 Job 类还应该在超时中包装其 #perform 方法的内容。)
按照您的建议,尝试坚持对 DJ 对象的引用几乎总是一个坏主意。
【讨论】:
除了 rake 任务,DelayedJob 作业只是一个普通的 ActiveRecord 模型,所以如果您使用 Ruby 代码,您可以对它们做您喜欢的事情:
Delayed::Job.destroy_all
Delayed::Job.delete_all
Delayed::Job.find(4).destroy
# etc.
【讨论】:
destroy和delete有区别吗?
destroy 将处理 Rails 定义的任何回调 - 特别是,它将清除您设置了 dependent: destroy 或 depdendent: nullify 的任何关联。 delete 只是从数据库中删除记录。一般来说,除非您有充分的理由,否则请始终使用 destroy 而不是 delete。