为什么rails 5使用puma而不是webrick进行开发?

时间:2018-04-05 14:10:02

标签: ruby-on-rails ruby-on-rails-5

我试图找出 Puma和Webrick 之间的区别,但没有得到它或对它感到满意。

所以请任何人分享有关它的信息。

3 个答案:

答案 0 :(得分:6)

默认 WEBrick 单线程,单个进程。这意味着如果两个请求同时进入,则第二个请求必须等待第一个请求完成。

解决慢速I / O的最有效方法是多线程。工作进程会在其中生成多个工作线程。每个请求都由其中一个线程处理,但是当它暂停I / O时 - 比如等待数据库查询 - 另一个线程开始工作。这快速回来&最好地利用你的RAM限制,并使你的CPU保持忙碌。

因此,使用 Puma 实现多线程,这就是它在Rails App中用作默认App Server的原因。

答案 1 :(得分:1)

这是针对Ruby on Rails开发人员而不是广大读者的问题,因为我不理解将Puma作为可靠选择的开发环境更接近生产的原因。

但是要纠正当前答案,我必须说 Webrick是,并且一直是多线程Web服务器。现在,它附带了Ruby语言(也提供rubygem)。而且绝对足够为开发或较小规模生产环境的Rails应用程序提供服务。

另一方面,它的配置不如Puma这样的其他Web服务器。它也基于旧式的新thread per request design。在高负载下这可能是一个问题,可能导致创建太多线程。现代的Web服务器通过使用线程池,工作进程或两种或其他技术的组合来解决此问题。这包括Puma,但是对于开发而言,按请求生成新线程是完全可以的。

我对这两者都不感到难过,它们都是出色的Ruby Web服务器,在我们的项目中我们实际上在生产中都使用了它们。无论如何,如果您喜欢将Webrick用于RoR开发,则确实可以使用它:

rails server webrick

答案 2 :(得分:0)

Rails 6.1 小更新:

public boolean willAcceptCallBack(currentTime, LocalDateTime())
{
            // Potential scenarios:
            // 1st write a scenario that will not accept out of hours calls
            // 2nd write a scenario that will not accept calls less than 2 hours in the future
            // 3rd write a scenario that will accept calls more than 6 days in the future
}