我的开发Rails 5服务器与Puma在我的单独前端应用程序一次向Rails API发送多个请求时一直冻结和挂起。没有错误,它只是挂在POST请求上。当我尝试用CTRL + C杀死服务器时,没有任何反应。我必须手动杀死端口。
我尝试在development.rb中设置config.eager_load = true。我已经尝试在application.rb中添加config.allow_concurrency。我无情地用谷歌搜索无济于事。我从前端同时发送了大约5个请求,所以我相信这个请求数量正在导致它,但我不确定。
有没有其他人经历过这个或者想知道这里需要做些什么?我通常可以成功地将所有请求回到前端大约3-4次,然后服务器就会冻结。
在服务器运行时更改项目中任何文件中的任何一行代码后,尤其会发生这种情况。
答案 0 :(得分:1)
已经快两年了,但我终于偶然发现导致我问题的原因。
基本上,它归结为我的代码中不是线程安全的方法。由于只能从我的控制器访问current_user
变量,因此我在基本控制器上有一个before_action将当前用户分配给User.current
,这样我就可以通过User.current
全局访问当前用户,不只是在我的控制器中
因此,请确保您没有在控制器中动态更新像这样的类。它不是线程安全的。对于我的特殊情况,我最终遵循了此线程安全的解决方案:https://stackoverflow.com/a/2513456/7629239
答案 1 :(得分:0)
你的美洲狮配置是什么?有多少线程和工人(Puma工人不是铁路工人)。
确保您的puma有足够的线程,并且您的db池足够大。更改一行代码不应导致服务器在资源中耗尽。你是否像守望者一样使用观察者?