【问题标题】:How to properly deal with concurrency in rails with puma?如何用 puma 正确处理 Rails 中的并发?
【发布时间】:2018-10-01 06:32:45
【问题描述】:

我有一个运行在多线程 Web 服务器 Puma 上的 Rails 应用程序。随着用户数量的增加,我开始看到我的一些模型在用户名上具有唯一的活动记录验证,在我的 API 上同时调用了两次,并在数据库中插入了两次。

这怎么可能?我需要从哪里开始调试?

【问题讨论】:

  • 您可能在该特定列上没有唯一数据库索引,因此验证在插入此特定值的其他事务尚未提交时运行。

标签: ruby-on-rails database concurrency constraints puma


【解决方案1】:

模型层验证/约束很好,但它们不能保证您已经体验过的数据完整性。为了保证真正的数据完整性,您的唯一解决方案是数据库层约束。

【讨论】:

    【解决方案2】:

    扩展@Andrey 的答案..我建议您阅读有关ActiveRecord::Locking 的信息。它将防止多个线程访问同一资源。如果您要处理财务数据,这种技术尤其重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2023-03-03
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多