16

很快,我计划将我的第一个 Ruby on Rails 应用程序部署到生产环境中,我什至选择了一个具有所有托管服务器和 Capistrano 优点的 Web 主机,您可以从 RoR 提供商那里获得期望。

该提供程序允许 Mongrel、Thin、Passenger 和 FastCGI Web 服务器,这看起来非常灵活,但老实说,我不知道它们之间的区别。我已经对它们进行了一些研究,但是当他们开始谈论功能和最大同时请求时,一切都会变得有点多——而且这些数据似乎因发布者而异。

我看过Passenger(从表面上看)——这对我来说确实很吸引人——但我的印象是Passenger不是真正的网络服务器,而是更像是Apache或nginx之上的一个层,并管理衍生应用程序的实例(如 Mongrel 集群)。

任何人都可以让我直接了解外行术语的差异,以便我可以明智地选择(因为任何看过印第安纳琼斯和最后的十字军东征的人都知道如果你选择不当会发生什么)。

4

4 回答 4

35

简短的回答

使用 Apache/Nginx + 乘客。乘客快速、可靠、易于配置和部署。乘客已被包括Shopify在内的大量大型 Rails 应用程序采用。

替代文字
(来源:modrails.com

长答案

忘记 CGI 和 FastCGI。一开始没有其他选择,所以运行 Rails 的唯一方法是使用 CGI 或更快的浏览器 FastCGI。现在几乎没有人在 CGI 下运行 Rails。最新的 Rails 版本不再提供 .cgi 和 .fcgi 运行器。

Mongrel 已被广泛采用,是 CGI 和 FCGI 的最佳替代品。许多站点仍然使用 Mongrel 和 Mongrel 集群,但是 Mongrel 项目几乎已死,许多项目已经转移到其他解决方案(主要是Passenger)。此外,基于 Mongrel 的架构很难配置,因为它需要一个前端代理(thin、ngnix)和一个由多个 Mongrel 实例组成的后端架构。

《Passenger》自发布以来就受到了广泛关注。许多项目从 Mongrel 切换到Passenger 的原因有很多,包括(但不限于)易于部署、可维护性和性能。此外,Passenger 现在可用于 Apache 和 Ngnix。

使用Passenger 的最简单方法是Apache + Passenger 配置。一个 Apache 安装和多个乘客进程。

如果您需要更好的性能和可扩展性,可以使用 Ngnix 作为前端代理,将所有 Rails 请求转发到多个后端服务器,每个后端服务器由 Apache + Passenger 组成。我不会在这里详细介绍技术细节,此解决方案旨在供具有高流量的 Rails 项目使用。

更复杂的解决方案包括不同级别的组合,包括 http 代理和服务器。你可以从GitHubHeroku阅读一些内部细节,了解我在说什么。

目前,Passenger 是大多数 Rails 项目的最佳答案。

于 2009-11-13T12:51:24.743 回答
9

Mongrel 和 Thin 是单个 ruby​​ 进程服务器,您可以在某种类型的代理(如 Apache 或 Nginx)后面作为集群运行多个。代理将管理 Mongrel 或 Thin 的哪个实例为请求提供服务。

乘客在 Apache 或 Nginx 之间创建一个接口,该接口创建一个应用程序生成进程,然后分叉出进程以在传入请求时为它们提供服务。有很多配置选项可以确定这些进程的生存时间,可以有多少,以及他们死前将服务多少请求。这是迄今为止扩展和处理高流量应用程序的最常用方法,但它并非没有缺点。这只能在 *nix 操作系统(linux、mac os x 等)上完成。此外,这些进程会按需启动,因此如果一段时间内没有人访问您的站点,它们会停止处理,并且下一个请求会延迟重新启动。使用 Mongrel 和 Thin,该过程始终在运行。但是,有时,您的流程是新的和新鲜的对于内存使用等可能是一件好事。

如果要成为流量相对较低的站点,Mongrel 或 Thin 提供了一种简单、易于管理的方式来部署应用程序。对于需要像Passenger这样的智能排队和流程管理的高流量站点,这是一个非常好的解决方案。

至于 fastcgi,您可能希望将其用作最后一个选项。

于 2009-11-13T12:57:13.930 回答
1

我使用乘客 + nginx。它真的很好用。

于 2009-11-13T15:15:21.497 回答
1

为了让乘客立即获得一些性能夸耀,我建议使用 ruby​​ 企业版。

于 2009-11-13T18:43:46.963 回答