Rails两个进程无法看到每个其他数据库更新

时间:2015-05-28 14:27:50

标签: ruby-on-rails apache passenger

如果我们并行发送两个请求,则其他进程看不到一个进程的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.9ApachePhusion_Passenger 4

修改

请注意foo1foo2是数据库中的不同记录,我想要的是process1能够看到process2的foo2.number,反之亦然,这样我就可以将其中一个作为重复。

1 个答案:

答案 0 :(得分:0)

好像你应该使用Optimistic Lockhere是更详细的信息)。在这种情况下,只有一个请求具有修改数据的能力。