Я признал проблему с пессимистической блокировкой внутри транзакции во время тестов rspec.
По какой-то причине в разных системах (я обнаружил это из-за того, что CI не смог запустить spec) запись все еще заблокирована и не может быть получена.
Итак, код и пример rspec приведены ниже.
class FooBar
def foo
Model.with_lock do
model.update(bar: "baz")
end
end
end
красный пример
it "updates with lock" do
expect { Foobar.foo }.to change { model.reload.bar }.to("baz")
end
но правильно зеленый пример должен выглядеть следующим образом
it do "updates with lock" do
Foobar.foo
expect(model.reload.bar).to eq("baz")
end