如果我们并行发送两个请求,则其他进程看不到一个进程的db更新。实际上我们正在上传包含一些数据的文件,并且在特定属性上有唯一的检查(不是模型或数据库级别,由某些业务规则控制)。
Process 1:
foo1 = Foo.new(data from file)
foo1.number = 1 # from file
foo1.save
foo1.process # it will only get processed if there is no other Foo with same number i.e. 1
Process 2:
foo2 = Foo.new(data from file)
foo2.number = 1 # some other user has uploaded the file with same number
foo2.save
foo2.process # it will only get processed if there is no other Foo with same number i.e. 1
如何处理这种情况,以便我可以让一个进程完成并使Foo.number(db查询)可用于其他进程?我没有使用数据库事务。
Rails 3.2.9
,Apache
,Phusion_Passenger 4
请注意foo1
和foo2
是数据库中的不同记录,我想要的是process1能够看到process2的foo2.number,反之亦然,这样我就可以将其中一个作为重复。