我正在使用适用于Rails 2.3.8的collectiveidea。我正在创建一组延迟任务数组来执行某些任务,一段时间后我想销毁正在运行的所有延迟任务。如果有人知道如何做到这一点,请帮助我。
我正在使用适用于Rails 2.3.8的collectiveidea。我正在创建一组延迟任务数组来执行某些任务,一段时间后我想销毁正在运行的所有延迟任务。如果有人知道如何做到这一点,请帮助我。
您可以调用rake jobs:clear
来删除队列中的所有作业。
除了rake任务外,DelayedJob作业只是普通的ActiveRecord模型,因此如果您在Ruby代码中,可以对它们进行任何操作:
Delayed::Job.destroy_all
Delayed::Job.delete_all
Delayed::Job.find(4).destroy
# etc.
destroy
会处理 Rails 定义的任何回调函数,特别是它将清理掉任何你设置了 dependent: destroy
或 dependent: nullify
的关联。delete
只是从数据库中删除记录。一般来说,除非你有充分的理由,否则请始终使用 destroy
而不是 delete
。 - Ryan Brunnerhandler
用于处理工作和工作参数的类的 yaml,last_error
用于最后一个错误的堆栈跟踪等。 job.attributes
将给出存储在数据库中的内容。此外,您可以使用 invoke_job
运行作业,但它不会删除它。 - localhostdotdev看起来您有一个父进程,如果其任务集在一定时间内没有完成,它会超时。不要保留对任务本身的引用,而是在模型上设置一个指示进程已放弃的标志。如果任务不再需要,则可以检查该标志并进行短路处理。(您的 Job 类还应将其 #perform 方法的内容包装在一个超时中。)
尝试保留对 DJ 对象的引用几乎总是一个坏主意,就像您所建议的那样。
rake jobs:clear
后,工作进程也停止了该特定作业。 - morhook