我在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不会(总是?)导致代码等待轮到.
这可能会发生什么?
更新
很抱歉所有说“锁定foo不会帮助你”的人!我的例子最初没有查找条形码.这是现在修复的.
解决方法
原文地址:https://www.jb51.cc/ruby/270021.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。