我在 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 对你没有帮助”的人表示抱歉!我的示例最初没有栏查找。现在已解决。