Ruby on rails 不同RubyonRails生产Web服务器之间的建议(和差异)

Ruby on rails 不同RubyonRails生产Web服务器之间的建议(和差异),ruby-on-rails,webserver,passenger,fastcgi,mongrel,Ruby On Rails,Webserver,Passenger,Fastcgi,Mongrel,很快,我计划将我的第一个RubyonRails应用程序部署到生产环境中,我甚至选择了一个webhost,它具有RoR提供商所期望的所有托管服务器和Capistrano功能 该提供商允许混合、精简、乘客和FastCGI web服务器,这看起来非常灵活,但我真的不知道它们之间的区别。我已经研究了一些,但当他们开始谈论功能和最大同时请求时,所有这些都变得有点多了,而且这些数据似乎因发布者的不同而有所不同 我已经看过了Passenger(从表面上看)——这对我来说确实很有吸引力——但我的印象是Passe

很快,我计划将我的第一个RubyonRails应用程序部署到生产环境中,我甚至选择了一个webhost,它具有RoR提供商所期望的所有托管服务器和Capistrano功能

该提供商允许混合、精简、乘客和FastCGI web服务器,这看起来非常灵活,但我真的不知道它们之间的区别。我已经研究了一些,但当他们开始谈论功能和最大同时请求时,所有这些都变得有点多了,而且这些数据似乎因发布者的不同而有所不同

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


有谁能直截了当地告诉我外行术语的不同之处,这样我才能做出明智的选择(因为看过《印第安纳琼斯》和《最后一次十字军东征》的人都知道如果你选择不当会发生什么)

简短回答

使用Apache/Nginx+Passenger。乘客、可靠、易于配置和部署。乘客已被大量大型轨道应用所采用,包括


(来源:)

长答案

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

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

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

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

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

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


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

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

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

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


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

我使用Passenger+nginx。它工作得非常非常好。

为了让乘客立即享受性能,我建议使用ruby enterprise edition

此链接可能会有所帮助: