rails controller的动作/禁用并发

时间:2018-04-27 06:05:34

标签: ruby-on-rails concurrency race-condition

我有一个端点,可以从我们的付款服务处收到确认。

但是,这种支付服务会ping两次,所以 - 鉴于我们是如何实施的 - 我们最终会得到两个订单确认。

我不打算讨论我们如何设计这个部分(它会得到改进) - 我想了解如何设置,以确保一个动作可以锁定任何并发的其他人,直到它完成。 / p>

或者至少要了解处理此类问题的出发点。

重复来自此操作:

def export
  return head(:ok) if @order.reload.state == 'complete'
  post_data(data)
  @order.update(state: :complete)
  head(:ok)
end

private

def post_data(data)
  Curl.post("#{SHOP_URL}/orders.json", data.to_json) do |http|
    http.headers['Content-Type'] = 'application/json'
    http.headers['Accept'] = '*/*'
  end
end

如果导出被调用两次,订单没有刷新,我最终会得到两个确认,我想避免。

0 个答案:

没有答案