我正在安排一个作业(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 性地删除哪些记录了?

希望这能为你提供足够的信息,让你知道如何处理它?

Ruby-on-rails相关问答推荐

RSpec系统测试无法从工厂访问新创建的记录

使用has_many_through关联创建记录 – Ruby on Rails

带有块捕获的 FormBuilder 辅助方法在 ERB 中不起作用

如何在测试期间为 Rails 应用程序启用 Rails.cache 会话对象

当我必须更改 rspec 中的方法时,如何检测时间?

验证模型属性大于另一个

如何在 YAML 中声明带有单引号和双引号的字符串?

禁用冻结字符串文字注释判断

如何确定 Rails 是从 CLI、控制台还是作为服务器运行?

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

从 before_action 中排除控制器

带有查询字符串参数的 Rails 动作缓存

Rails 4 查找没有子元素的父母

使用 RSpec 2 关闭一个规范的事务性固定装置

如何在 rspec 测试中输出变量?

Dotenv 多行变量

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

sass-rails 助手image-url、asset-url在 rails 3.2.1 中不起作用

Date.current 和 Date.today 有什么区别?

错误:删除表违反外键约束.密钥 id 仍然从表中引用(很多)