销毁之前的Rails,称为工作者,因为它已经被破坏而找不到记录

时间:2016-04-06 21:14:24

标签: ruby-on-rails sidekiq

我的模型before_destroy上有一个Connection回调。

看起来像这样:

def run_my_worker
  SomeWorker.perform_async(self.id)
end

该方法调用Sidekiq Worker来执行。当Sidekiq Worker运行时,模型已被破坏,当我根据传递给工作者的id查询它时,它无法“找到”它。

我怎样才能解决这个问题?这种情况的替代方案是什么?

2 个答案:

答案 0 :(得分:1)

即使记录被破坏,您也可以传递应该对您的工作人员可用的整个对象。

def run_my_worker
  SomeWorker.perform_async(self)
end

更新1

解析json然后解析你的工作人员

def perform(my_object)
  # parsed_object will store a hash representation of my_object
  parsed_object = JSON.parse(my_object)
end

答案 1 :(得分:1)

最简单的方法是:

  1. 同步完成工作,或
  2. 您需要的所有数据传递给异步方法(如Reyko的回答)
  3. 如果这些都不起作用,你需要进行异步工作,然后一旦你完成它就会销毁它。

    一种方法是编写一种新方法(如do_whatever_then_destroy)。您可以使用Sidekiq的Batches功能在工作完成后获得回调。此时,您可以销毁模型对象,因为您最终完成了它。