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

 陈凯105_462 发布于 2023-01-30 19:39

我目前正在使用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

Berimbolo.. 8

打开2个控制台

控制台1:

User.transaction do 
  u = User.find(1, :lock => true)
  sleep(30)
end

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

控制台2:

u = User.find(1)
u.name = "new name"
u.save!

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

1 个回答
  • 打开2个控制台

    控制台1:

    User.transaction do 
      u = User.find(1, :lock => true)
      sleep(30)
    end
    

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

    控制台2:

    u = User.find(1)
    u.name = "new name"
    u.save!
    

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

    2023-01-30 19:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有