【问题标题】:What is rack in ruby? What is puma in ruby?红宝石中的机架是什么?红宝石中的美洲狮是什么?
【发布时间】:2019-06-22 04:59:01
【问题描述】:

根据定义,puma是一种网络服务器,机架是网络服务器和应用服务器之间的接口。

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

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

【问题讨论】:

  • 我找到了一篇关于使用 Puma 和 Nginx 部署 Rails 应用程序的文章。它说,“由于 Puma 不是为用户直接访问而设计的,我们将使用 Nginx 作为反向代理,缓冲用户和 Rails 应用程序之间的请求和响应。”为什么用户可以直接访问puma?

标签: ruby rack puma


【解决方案1】:

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

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

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

因此,通常情况下,您的 Web 服务器接受连接,然后使用 simple reverse proxy 将适当的请求传递给 Rack 应用程序,该应用程序在 Rack 应用服务器内执行。这为您提供了所有相关部分的好处。

【讨论】:

  • Rack 不解析 HTTP。这就是应用服务器所做的。 Rack 获取一个请求(包括在 Ruby Hash 中解析的 HTTP 标头),通过各种中间件处理它,最后将它交给应用程序(例如 Rails 应用程序)。它再次返回一个 Ruby 对象。应用服务器反过来将其转换为 HTTP 响应并将其返回给客户端。因此,尽管 Rack 中的语义是根据 HTTP 建模的,但它从未真正看到“原始”HTTP。
  • 此外,要“直接执行 Rack 应用程序”,您还可以使用 Webrick 之类的应用程序服务器。在这方面,“网络服务器”和“应用程序服务器”之间的界限有点​​模糊。因为这两种类型都可能解析 HTTP 并将请求交给使用不同协议(如 Rack、CGI、WSGI...)的内容处理程序
  • @HolgerJust 你是对的,当然;我过于简单化了。当我回到键盘上时会修复。
  • 其实puma就是一个管理进程和内存的应用服务器吧?感谢您的全面解释。
  • WSCH 是一个广播电台。 WSGI 类似于 Rack,用于 Python。 Django 和 CherryPy 是 Python Web 框架,分别类似于 Ruby 的 Rails 和 Sinatra。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2017-08-11
  • 2011-04-26
  • 1970-01-01
  • 2010-10-06
  • 2015-07-28
相关资源
最近更新 更多