如何使用 puma 正确处理 rails 中的并发?

How to properly deal with concurrency in rails with puma?

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

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

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

扩展@Andrey 的回答..我建议您阅读 ActiveRecord::Locking。它会阻止多个线程访问相同的资源。如果您正在处理财务数据,此技术尤为重要。