Rails 5 服务器在一次收到多个请求时挂起

Rails 5 server hangs when receives multiple requests at once

我的开发 Rails 5 服务器与 Puma 在一次从我单独的前端应用程序向 Rails API 发送多个请求时一直冻结和挂起。没有错误,它只是挂在 POST 请求上。当我尝试使用 CTRL + C 终止服务器时,没有任何反应。我必须手动终止端口。

我试过在 development.rb 中设置 config.eager_load=true。我尝试在 application.rb 中添加 config.allow_concurrency。我用谷歌搜索无济于事。我从前端同时发送大约 5 个请求,所以我相信是这个请求数量导致的,但我不确定。

有没有其他人遇到过这种情况或知道这里需要做什么?我通常可以让所有请求成功返回前端大约 3-4 次,然后服务器就死机了。

尤其是在服务器处于运行的情况下更改了项目中任何文件中的任何一行代码后出现。

你的puma配置是什么?有多少线程和工人(Puma 工人不是 rails 工人)。

确保你的 puma 有足够的线程,并且你的数据库池足够大。更改一行代码不应导致您的服务器资源耗尽。你在用守望者之类的守望者吗?

已经将近 2 年了,但我终于偶然发现了导致我出现问题的原因。

基本上它归结为我的代码中的一个方法不是线程安全的。由于我的 current_user 变量只能从我的控制器访问,我在我的基本控制器上有一个 before_action 将当前用户分配给 User.current 以便我可以通过 [= 全局访问当前用户11=],不仅在我的控制器中。

所以请确保您没有像我这样在您的控制器中动态更新 类。它不是线程安全的。对于我的特殊情况,我最终采用了这个线程安全的解决方案: