gpt4 book ai didi

postgresql - 使用 find_or_create_by 解决竞争条件

转载 作者:行者123 更新时间:2023-11-29 12:20:05 28 4
gpt4 key购买 nike

我正在使用

@current_device ||= Device.find_or_create_by!(udid: request.headers["udid"])

有时会出现竞争条件,由于网络行为,同时发出 2 个请求,这会导致使用相同的 udid 创建 2 个设备,即使对 udid 列的唯一性进行了验证。

我试着用

begin
@current_device ||= Device.find_or_create_by!(udid: request.headers["udid"])
rescue ActiveRecord::RecordInvalid => e
if e.message == 'Validation failed: Udid has already been taken'
retry #to compensate/handle possible(and very happening) race condition
else
Rollbar.error(e)
end
end

但它不起作用。

有没有更好的方法来处理这种竞争条件?

最佳答案

关于postgresql - 使用 find_or_create_by 解决竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908108/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com