什么是 ruby​​ 中的机架?红宝石中的美洲狮是什么?

Vic*_* Xu 1 ruby rack puma

根据定义,puma 是一种 web 服务器,rack 是 web 服务器和应用服务器之间的接口。

但是,很多视频都提到机架是 Web 框架和 Web 服务器之间的接口。那么我可以解释为我们使用 web 框架来构建我们的应用程序,所以机架是 web 框架和 web 服务器之间的接口吗?

另一个问题是,如果 puma 是一种网络服务器,我可以使用 Apache 或 Nginx 来代替它吗?

Ama*_*dan 5

Puma 是一个应用服务器,更具体地说是一个Rack应用服务器。(不仅仅是Puma:Unicorn、Passenger等,还有不同接口的应用服务器,比如Tomcat和JBoss就是Java应用服务器。)一个应用服务器接受一个HTTP请求,将它解析成应用程序中语言,将它交给应用程序,并等待一个响应对象,然后它返回给客户端。

Nginx/Apache 是通用 Web 服务器。Apache 不知道如何为 Rack 应用程序提供服务,而 Puma 也不知道如何做 Nginx/Apache 做的许多其他事情(例如 CGI 脚本、URL 重写、代理、平衡、黑名单……)

Rack 是一个用于 Ruby 的库,它接受来自应用服务器的已解析 HTTP 请求,通过可配置的中间件堆栈(例如会话处理)将请求对象传递给处理程序,并将响应对象返回应用服务器,从而使 Web Ruby 开发很简单。您可以直接执行 Rack 应用程序(或者更确切地说,使用安装了 Rack 的非常简单的服务器),但不建议在开发之外进行,这是“合适的”应用程序服务器的用武之地:它们知道如何让您的应用程序保持活动状态, 如果它死了就重新启动它,保证有预定数量的线程在运行,诸如此类。

因此,通常,您让您的 Web 服务器接受连接,然后使用简单的反向代理将适当的请求传递给您的 Rack 应用程序,该应用程序在 Rack 应用程序服务器内执行。这为您提供了所有相关部分的好处。

  • Rack 不解析 HTTP。这就是应用程序服务器的作用。Rack 获取请求(包括 Ruby Hash 中解析的 HTTP 标头),通过各种中间件处理它,最后将其交给应用程序(例如 Rails 应用程序)。它再次返回一个 Ruby 对象。应用程序服务器随后将其转换为 HTTP 响应并将其返回给客户端。因此,尽管 Rack 中的语义是根据 HTTP 建模的,但它实际上从未看到“原始”HTTP。 (2认同)
  • 此外,要“直接执行 Rack 应用程序”,您还可以使用 Webrick 等应用程序服务器。在这方面,“网络服务器”和“应用程序服务器”之间的界限有点​​模糊。因为这两种类型都可能解析 HTTP 并将请求交给使用不同协议的内容处理程序(例如 Rack、CGI、WSGI,...) (2认同)