我的模型before_destroy
上有一个Connection
回调。
看起来像这样:
def run_my_worker
SomeWorker.perform_async(self.id)
end
该方法调用Sidekiq Worker来执行。当Sidekiq Worker运行时,模型已被破坏,当我根据传递给工作者的id
查询它时,它无法“找到”它。
我怎样才能解决这个问题?这种情况的替代方案是什么?
答案 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)
最简单的方法是:
如果这些都不起作用,你需要进行异步工作,然后一旦你完成它就会销毁它。
一种方法是编写一种新方法(如do_whatever_then_destroy
)。您可以使用Sidekiq的Batches功能在工作完成后获得回调。此时,您可以销毁模型对象,因为您最终完成了它。