如何在sidekiq事务完成之前提交数据库?
问题描述:
我正在尝试更新作业内迭代的表格行。下面是代码示例如何在sidekiq事务完成之前提交数据库?
class UpdateTableJob < ApplicationJob
def perform(arg1, arg2)
User.each do |person|
person.update_attributes(:name => "test")
sleep 25
end
end
end
说我有100个用户和100用户的迭代完成后才能,我看得出来,改变被提交到数据库。但是我怎样才能在每次更新中实现这一点?
答
显式创建事务,以便控制边界。
class UpdateTableJob < ApplicationJob
def perform(arg1, arg2)
User.each do |person|
User.transaction do
person.update_attributes(:name => "test")
sleep 25
end
end
end
end
1.您确定'perform'正在处理事务吗? –
2.在您的示例中不使用交易是错误的方法 –
在第二条评论中,您是否说交易是强制性的。正如我在更新用户之后尝试从数据库获取值时所说的那样,我无法找到更新,但只有在作业完成后才会更新。但是,当我尝试在更新后强行提交数据库时,我能够看到数据库中的更改。 – logesh