我正在安排一个作业(job),比如说10分钟.如何在不使用模型中任何脏的额外字段的情况下正确地取消这个特定的作业(job)等等.是否有要求删除特定作业(job),或与特定模型、实例等相关的作业(job)?
我正在安排一个作业(job),比如说10分钟.如何在不使用模型中任何脏的额外字段的情况下正确地取消这个特定的作业(job)等等.是否有要求删除特定作业(job),或与特定模型、实例等相关的作业(job)?
免责声明:我不是延迟工作的专家用户...
"Is there any call to remove particular job, or jobs related to specific model, instance, etc?"
延迟::作业(job)只是一个ActiveRecord对象,所以您可以找到并销毁任何这些记录.根据您的用例,这可以用不同的方式处理.如果有人要手动销毁它们,可以通过web应用程序中的管理界面来处理.
# list all jobs
Delayed::Job.all
# find a job by id
job = Delayed::Job.find(params[:id])
# delete it
job.delete
如果你需要一些进程外的任务,按"作业(job)类型"删除作业(job),你可以循环浏览每一个作业(job),如果它与你的作业(job)匹配,就删除它;在脚本/控制台中试试这个
class MyJob < Struct.new(:some_value);
def perform
# ...
end
end
my_job = MyJob.new('xyz')
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob"
job.handler
# => "--- !ruby/struct:MyJob \nsome_value: xyz\n"
因此,如果你想删除MyJob类型的所有作业(job)
Delayed::Job.all.each do |job|
if job.name == "MyJob" then
job.delete
end
end
这可能对你的情况有帮助,也可能没有帮助?在许多情况下,您可能希望删除MyJob,但仅当:some_value属性是'abc'而不是'xyz'时.在这种情况下,您可能需要在MyJob对象上实现一个"display_name".工作如果存在,name将使用它
class MyJob < Struct.new(:user_id);
def perform
# ...
end
def display_name
return "MyJob-User-#{user_id}"
end
end
# store reference to a User
my_job = MyJob.new(User.first.id) # users.id is 1
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob-User-1"
job.handler
# => "--- !ruby/struct:MyJob \nuser_id: 1\n"
这样你就可以更加有 Select 性地删除哪些记录了?
希望这能为你提供足够的信息,让你知道如何处理它?