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



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

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

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

在服务器运行时更改项目中任何文件中的任意一行代码后,尤其会出现这种情况。

已经

快 2 年了,但我终于偶然发现了导致我的问题的原因。

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

因此,请确保您没有像我这样的控制器动态更新类。它不是线程安全的。对于我的特定情况,我最终遵循了这个线程安全解决方案:https://stackoverflow.com/a/2513456/7629239

你的彪马配置是什么?有多少线程和工人(彪马工人不是轨道工人(。

确保您的 puma 有足够的线程,并且您的数据库池足够大。更改一行代码不应导致服务器耗尽资源。你是否在使用像守望者这样的观察者?

最新更新