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

Kis*_*are 5 ruby-on-rails ruby-on-rails-5

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

因此,任何人都可以分享有关它的信息。

Roh*_*han 8

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

解决慢速I / O的最有效方法是多线程。一个工作进程在其中产生了几个工作线程。每个请求都由这些线程之一处理,但是当它暂停I / O时(例如等待数据库查询),另一个线程开始工作。这种快速的来回过程可以最大程度地利用您的RAM限制,并使CPU保持繁忙。

因此,使用Puma可以实现多线程,这就是为什么它将其用作Rails App中的默认App Server。

  • 事件I / O是执行慢速I / O的最有效方法。事件服务器可以处理数万个连接(不同于线程服务器) (2认同)
  • Webrick 一直是一个多线程服务器,您可以检查 server.rb 代码库和 git 历史记录(create_thread 方法调用)。我提交了一个答案来纠正这个问题。 (2认同)

lza*_*zap 6

这是 Ruby on Rails 开发人员而不是广大受众的问题,因为我不明白为什么要让开发环境更接近生产,而 Puma 是一个可靠的选择。

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

另一方面,它不像 Puma 等其他 Web 服务器那样可配置。它还基于老式的按请求新线程设计。这可能是重负载下的一个问题,可能导致创建太多线程。现代 Web 服务器通过使用线程池、工作进程或两者或其他技术的组合来解决此问题。这包括 Puma,但是对于开发来说,每个请求生成一个新线程是完全可以的。

我对这两者都没有什么不好的感觉,两者都是很棒的 Ruby Web 服务器,在我们的项目中,我们实际上在生产中使用了它们。不管怎样,如果你喜欢使用 Webrick 进行 RoR 开发,你确实仍然可以使用它:

rails server webrick
Run Code Online (Sandbox Code Playgroud)