首页 文章

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

提问于
浏览
15

我很快就计划将我的第一个Ruby on Rails应用程序部署到 生产环境 环境中,我甚至选择了一个带有所有托管服务器的webhost,以及你期望从RoR提供商那里获得的Capistrano优点 .

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

我看过Passenger(表面上看) - 这看起来对我很有吸引力 - 但我的印象是Passenger不是真正的网络服务器,而是更像是Apache或nginx之上的一层并且管理产生了应用程序的实例(如Mongrel集群) .

任何人都可以请我直截了当地看待印第安纳琼斯和最后十字军的差异,如果你选择不好的话会发生什么 .

4 回答

  • 9

    Short answer

    使用Apache / Nginx Passenger . Passenger is fast,可靠,易于配置和部署 . Passenger已经被大量的Rails应用程序采用,包括Shopify .

    alt text http://www.modrails.com/images/passenger_mongrel_thin_benchmark.png

    The long answer

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

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

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

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

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

    更复杂的解决方案包括不同级别的组合,包括http代理和服务器 . 您可以了解我正在谈论从GitHubHeroku阅读一些内部细节 .

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

  • 1

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

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

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

    至于fastcgi,你可能想把它作为最后一个选项 .

  • 1

    我使用Passenger nginx . 它真的很好用 .

  • 34

    为了让乘客获得一些即时表演,我推荐使用ruby企业版 .

相关问题