【问题标题】:Why rails 5 using puma instead of webrick for development purpose?为什么 Rails 5 使用 puma 而不是 webrick 进行开发?
【发布时间】:2018-04-05 14:10:01
【问题描述】:

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

那么请任何人分享有关它的信息。

【问题讨论】:

  • "why" - puma 是更好/更快的服务器。这是一个足够好的理由。 (而且您从一开始就有一个生产级服务器,并且不需要需要为生产环境使用另一台服务器)
  • @SergioTulentsev 您是否有任何基准支持您声称 Puma 更快的说法? puma.io 仅将其与其他(非 WEBrick)服务器进行比较。

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


【解决方案1】:

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

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

所以,多线程是使用 Puma 实现的,这就是为什么它被用作 Rails App 中的默认应用服务器。

【讨论】:

  • 执行慢速 I/O 的最有效方法是事件 I/O。事件服务器可以处理数万个连接(与线程服务器不同)
  • @Rohan 它也是生产中 Rails 的默认服务器吗?
  • 是的..从 Rails 5 开始,它是开发和生产的默认服务器,但您也可以使用其他服务器进行生产
  • Webrick 一直是多线程服务器,可以查看 server.rb 代码库和 git 历史记录(create_thread 方法调用)。我提交了一个答案来纠正这个问题。
  • Webrick 不是多线程的,因为它在单个 ruby​​ 进程中运行,而 ruby​​ 本身也不是多线程的。这里有这么多非常糟糕的cmets,吓人。事件 I/O 与“缓慢”这个问题完全无关。
【解决方案2】:

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

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

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

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

rails server webrick

【讨论】:

【解决方案3】:

Rails 6.1 小更新:

rails server -u webrick [-p NNNN]

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2018-05-02
    • 2016-09-18
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多