У меня есть следующий код в модели рельсов:
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 создаваемого типа не создается дважды.
Тестирование с блокировкой _на консоли подтверждает мои ожидания. Однако в производственной среде кажется, что в некоторых или во всех случаях блокировка работает не так, как ожидалось, и предпринимается попытка избыточного Bar --, так что блокировка with _не всегда (? )приводит к тому, что код ожидает своей очереди.
Что здесь может происходить?
обновление извините всех, кто говорил, что "блокировка foo вам не поможет"!! в моем примере изначально не было поиска по бару. это исправлено сейчас.