为我的 Ruby on Rails 应用程序设置开发服务器的整个问题让我感到困惑。有 WEBrick、Mongrel、Passenger、Apache、Nginx 等等,我很确定,但我并不真正了解它们所扮演的不同角色。
我开始使用 WEBrick,现在我使用 Mongrel 进行开发。这些服务器是独立的,还是位于 Apache 前面?
我读过有关Passenger的文章,但我不太明白它是什么,该网站说“使Ruby Web应用程序的部署变得轻而易举”,它是否取代了Mongrel?是不是也像 Capistrano 一样部署 Web 应用程序?
记住我想测试 SSL,我相信 mongrel 不支持,最好的开发服务器设置是什么?
谢谢
根据上下文,“部署”一词可以有两种含义。您还将 Apache/Nginx 的角色与其他组件的角色混淆了。
历史记录:本文最初写于 2010 年 11 月 6 日,当时 Ruby 应用服务器生态系统受到限制。我已于 2013 年 3 月 15 日更新了这篇文章,其中包含生态系统中的所有最新更新。
免责声明 :我是应用服务器之一 Phusion Passenger 的作者之一。
它们都是 Web 服务器。它们可以提供静态文件,但 - 使用正确的模块 - 也可以提供动态 Web 应用程序,例如那些用 PHP 编写的应用程序。Apache更流行,功能更多,Nginx更小更快,功能更少。
Apache 和 Nginx 都不能提供开箱即用的 Ruby Web 应用程序,为此您需要将 Apache/Nginx 与某种附加组件结合使用,稍后将进行介绍。
Apache 和 Nginx 也可以充当反向代理,这意味着它们可以接收传入的 HTTP 请求并将其转发到另一台服务器,该服务器也使用 HTTP。当该服务器响应 HTTP 响应时,Apache/Nginx 会将响应转发回客户端;稍后您将了解为什么这是相关的。
Mongrel 是一个 Ruby “应用程序服务器”:具体来说,这意味着 Mongrel 是一个应用程序,它:
然而 Mongrel 已经过时了,现在它不再被维护了。较新的替代应用程序服务器是:
稍后我将介绍它们并描述它们彼此之间以及与 Mongrel 的不同之处。
WEBrick 与 Mongrel 做同样的事情,但不同之处在于:
当前所有的 Ruby 应用程序服务器都使用 HTTP,但是一些应用程序服务器可能会在端口 80 上直接暴露给 Internet,而另一些可能不会。
为什么必须将某些应用服务器放在反向代理后面?
为什么有些应用服务器可以直接暴露在互联网上?
在本节中,我将比较我提到的大多数应用程序服务器,但不比较 Phusion Passenger。Phusion Passenger 与其他野兽是如此不同,我已经给它一个专门的部分。我也省略了 Trinidad 和 TorqueBox,因为我不太了解它们,但它们只有在使用 JRuby 时才有意义。
Phusion Passenger 的工作方式与所有其他乘客非常不同。Phusion Passenger 直接集成到 Apache 或 Nginx 中,因此可以与 Apache 的 mod_php 进行比较。就像 mod_php 允许 Apache 几乎神奇地服务 PHP 应用程序一样,Phusion Passenger 几乎神奇地允许 Apache(还有 Nginx!)服务 Ruby 应用程序。Phusion Passenger 的目标是让一切尽在掌控之中,并尽可能减少麻烦。
无需为您的应用程序启动进程或集群,并配置 Apache/Nginx 以使用 Phusion Passenger 为进程/集群提供静态文件和/或反向代理请求,您只需:
所有配置都在 Web 服务器配置文件中完成。Phusion Passenger 几乎可以实现一切自动化。无需启动集群和管理进程。启动/停止进程,在它们崩溃时重新启动它们等 - 全部自动化。与其他应用服务器相比,Phusion Passenger 的移动部件要少得多。这种易用性是人们使用 Phusion Passenger 的主要原因之一。
与其他应用服务器不同的是,Phusion Passenger 主要是用 C++ 编写的,因此速度非常快。
Phusion Passenger还有一个Enterprise 变体,具有更多功能,例如自动滚动重启、多线程支持、部署错误抵抗等。
由于上述原因,Phusion Passenger 是目前最受欢迎的 Ruby 应用服务器,为超过 150,000 个网站提供支持,其中包括纽约时报、皮克斯、Airbnb 等大型网站。
Phusion Passenger 提供了更多的功能,并提供了优于其他应用程序服务器的许多优势,例如:
Unicorn 不擅长的工作负载有:
Phusion Passenger Enterprise 4或更高版本中的混合 I/O 模型使其成为此类工作负载的绝佳选择。
还有更多的功能和优势,但列表真的很长。您应该参考全面的 Phusion Passenger 手册(Apache 版、Nginx 版)或Phusion Passenger 网站以获取信息。
最近在 Phusion 博客上发布了一篇关于根据您的工作负载优化调整进程和线程数量的文章。请参阅调整 Phusion Passenger 的并发设置。
Capistrano 是完全不同的东西。在前面的所有部分中,“部署”是指在应用程序服务器中启动 Ruby 应用程序的行为,以便访问者可以访问它,但在此之前,通常需要做一些准备工作,例如:
在 Capistrano 的上下文中,“部署”是指完成所有这些准备工作。Capistrano 不是应用服务器。相反,它是一个自动化所有准备工作的工具。您告诉 Capistrano 您的服务器在哪里以及每次部署应用程序的新版本时需要运行哪些命令,Capistrano 将负责为您将 Rails 应用程序上传到服务器并运行您指定的命令。
Capistrano 始终与应用程序服务器结合使用。它不会取代应用程序服务器。反之亦然,应用服务器不会取代 Capistrano,它们可以与 Capistrano 结合使用。
当然,您不必 使用 Capistrano。如果您喜欢使用 FTP 上传您的 Ruby 应用程序并每次手动运行相同的命令步骤,那么您可以这样做。其他人厌倦了它,所以他们在 Capistrano 中自动化了这些步骤。