ruby-on-rails – 使用Rails和Postgres,数据库锁不能正常工作
发布时间:2020-12-16 19:06:43 所属栏目:百科 来源:网络整理
导读:我在rails模型中有以下代码: foo = Food.find(...)foo.with_lock do if bar = foo.bars.find_by_stuff(stuff) # do something with bar else bar = foo.bars.create! # do something with bar endend 目标是确保创建的类型的Bar不会被创建两次. 在控制台上
我在rails模型中有以下代码:
foo = Food.find(...) foo.with_lock do if bar = foo.bars.find_by_stuff(stuff) # do something with bar else bar = foo.bars.create! # do something with bar end end 目标是确保创建的类型的Bar不会被创建两次. 在控制台上测试with_lock确认了我的期望.但是,在生产中,似乎在某些或所有情况下,锁未按预期工作,并且正在尝试使用冗余Bar – 因此,with_lock不会(总是?)导致代码等待轮到. 这可能会发生什么? 更新 解决方法
锁定在查询缓存中的Rails应用程序中无法正常工作的原因.
如果您尝试在单个请求中多次在同一行上获取独占锁,则查询缓存会启动,因此后续锁定查询永远不会到达数据库本身. 在Github上The issue has been reported. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |