当一次从我的单独前端应用程序向 Rails API 发送多个请求时,我使用 Puma 开发的 Rails 5 服务器一直冻结并挂起。没有错误,它只是挂在 POST 请求上。当我尝试使用 CTRL + C 终止服务器时,没有任何反应。我必须手动终止该端口。
我尝试在development.rb中设置config.eager_load=true。我尝试在 application.rb 中添加 config.allow_concurrency 。我不停地用谷歌搜索毫无结果。我从前端同时发送大约 5 个请求,所以我相信是这么多请求造成的,但我不确定。
有其他人经历过这种情况或者知道这里需要做什么吗?我通常可以让所有请求成功返回前端大约 3-4 次,然后服务器就会冻结。
尤其是在服务器运行时更改项目中任何文件中的任何一行代码后,尤其会发生这种情况。
我对 Puma 有一个非常乏味的问题,其中 Rails 服务器在接收多个并发 HTTP 请求时挂起。当我使用 5 个线程(Rails 默认)和 2 个工作线程时,服务器有 90% 的时间会死机。如果我将工人数量设置为 20(这显然不理想),那么它只有大约 5% 的时间冻结。但它仍然冻结。我使用 Rails 作为单独的 Javascript 应用程序的 API。
我一直在调试和谷歌搜索这个无情的,并没有找到解决办法。我注意到它只发生在我在前端加载一个页面时,该页面向 6 个不同的 Rails 控制器发出 6 个并发 POST“搜索”请求。看起来是一个并发问题,但是,Rails 应该能够同时处理 6 个请求,对吧?
进一步解释我的 Rails 设置:
我的所有控制器都为它们的所有方法包含相同的模块。我很好奇 Puma 的并发性是否会同时为 6 个不同的控制器使用相同的模块,特别是因为它们使用相同的实例变量分配给每个搜索结果集合。这可能是问题吗?如果是这样,控制器模块似乎是个坏主意。所有控制器都可以使用的高阶控制器类/模块的替代方案是什么?
Ruby on Rails Enums 自动从 0 开始索引。我想从 1 开始索引这些。有什么简单的方法可以做到这一点?