Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Sidekiq-删除任务时删除计划作业_Ruby On Rails_Sidekiq - Fatal编程技术网

Ruby on rails Sidekiq-删除任务时删除计划作业

Ruby on rails Sidekiq-删除任务时删除计划作业,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,当用户在创建操作中使用以下代码创建特定日期的任务时,我会安排提醒电子邮件: if @post.save EmailWorker.perform_in(@time.minutes, @post.id) end 每当删除关联的任务时,我都要删除计划的提醒邮件。在销毁之前,我尝试在上使用模型方法: before_destroy :destroy_sidekiq_job def destroy_sidekiq_job post_id = self.id queue = Sidekiq::

当用户在创建操作中使用以下代码创建特定日期的任务时,我会安排提醒电子邮件:

if @post.save
  EmailWorker.perform_in(@time.minutes, @post.id)
end
每当删除关联的任务时,我都要删除计划的提醒邮件。在销毁之前,我尝试在
上使用模型方法:

before_destroy :destroy_sidekiq_job

def destroy_sidekiq_job
  post_id = self.id
  queue = Sidekiq::Queue.new('critical')
  queue.each do |job|
    if job.klass == 'EmailWorker' && job.args.first == post_id
      job.delete
    end
  end
end

但是,作业不会从队列中删除。有什么建议可以帮我解决这个问题吗?

计划作业还不在队列中,请使用
Sidekiq::ScheduledSet
查找计划作业:

def destroy_sidekiq_jobs
  scheduled = Sidekiq::ScheduledSet.new
  scheduled.each do |job|
    if job.klass == 'EmailWorker' && job.args.first == id
      job.delete
    end
  end
end

计划作业尚未在队列中,请使用
Sidekiq::ScheduledSet
查找计划作业:

def destroy_sidekiq_jobs
  scheduled = Sidekiq::ScheduledSet.new
  scheduled.each do |job|
    if job.klass == 'EmailWorker' && job.args.first == id
      job.delete
    end
  end
end

不要这样做。让Sidekiq执行作业,但在运行电子邮件作业时验证post是否存在且是否为当前的

def perform(post_id)
  post = Post.find_by_id(post_id)
  return unless post

  ...
end

不要这样做。让Sidekiq执行作业,但在运行电子邮件作业时验证post是否存在且是否为当前的

def perform(post_id)
  post = Post.find_by_id(post_id)
  return unless post

  ...
end

你太棒了!非常感谢!只是一个简单的问题-为什么它们还不在队列中?只有准备好运行的作业才在队列中。在此之前,它们生活在ScheduledSet中,并被调度器移动到队列中。你太棒了!非常感谢!只是一个简单的问题-为什么它们还不在队列中?只有准备好运行的作业才在队列中。在此之前,它们生活在ScheduledSet中,并由调度器移动到队列中。这很有效。我将如何在添加更新的支票?不确定如何获取更新日期的变量并对其进行比较您的意思是,如果post.updated\u at>某个日期
,则返回
?是,但检查将是post.updated\u at==quene.updated\u at。我将更新的_作为一个参数传入,redis将其与post id一起保存。这很有效。我将如何在添加更新的支票?不确定如何获取更新日期的变量并对其进行比较您的意思是,如果post.updated\u at>某个日期
,则返回
?是,但检查将是post.updated\u at==quene.updated\u at。我将更新的_作为参数传入,redis将其与post id一起保存。