Rails 3:如何简单地测试控制台上的悲观锁定

1 postgresql pessimistic-locking ruby-on-rails-3

我目前正在使用rails 3 + postgresql做一个悲观的loking.但似乎没有办法确认锁是否正常工作,除非我经历了进行并发测试的麻烦.有没有办法通过控制台测试这个?

User.transaction do 
  u1 = User.find(1, :lock => true)
  u2 = User.find(1)
  ## u2 should not be able to do anything right?
end
Run Code Online (Sandbox Code Playgroud)

Ber*_*olo 8

打开2个控制台

控制台1:

User.transaction do 
  u = User.find(1, :lock => true)
  sleep(30)
end
Run Code Online (Sandbox Code Playgroud)

执行完切换后,切换到控制台2,然后执行此操作

控制台2:

u = User.find(1)
u.name = "new name"
u.save!
Run Code Online (Sandbox Code Playgroud)

然后,您将看到控制台2在控制台1上的30秒睡眠完成之前不会提交更新.