Linux上新的Rails部署最佳实践?

31

我曾使用过单独的Mongrel,也使用过Mongrel集群在Apache后面运行,我也看过Thin,现在我对Passenger产生了浓厚的兴趣。我也看过Nginx。我还看过MRI、Ruby Enterprise Edition、Rubinius和JRuby。每个选项都声称是新的救世主。

对于一个全新的、完全更新的部署来说,哪个是最佳的选择呢?唯一的假设是:

  • 应用程序基于Rails 2.2。(我知道2.2还没有完全发布,但这次部署也没有。)
  • 服务器基于Linux。可能是Ubuntu Hardy,但实际上,无论在这种情况下哪种操作系统都可以。
  • Rails需要完全可用,并且可能需要与MySQL数据库交互。
  • 其他一切都是可协商的。

在特别宽泛的限制下,哪种软件组合将产生最佳结果,以并发性和低开销为考量?

我倾向于使用“worker” mpm和Passenger + Ruby Enterprise Edition的Apache,因为它提供了即时的稳定性和简单的设置和维护。

使用其他选项是否可能会更好呢?

9个回答

16

两周前,我从Mongrel Cluster切换到了Passenger(Debian Linux服务器)。我没有一秒钟后悔。Passenger可能是让你的新服务器上线最简单的方法。性能和可靠性也是可以的。

就个人而言,我喜欢把时间花在激动人心的新Rails项目上,而不是处理部署问题 - Passenger使我能够做到这一点。但是,如果您有某些特殊要求(大多数产品不适用),可能仍然更喜欢Mongrel或其他东西。


1
+1 for Passenger -- 超级简单的部署,就像Mongrel以前一样快(有时对我的应用程序来说更快)。太棒了! - PJ.
又为Passenger加1分。我曾经在Debian上尝试了一个星期来设置一组Mongrel,但是使用Passenger只用了一个下午就完成了部署设置。 - Alan
+1 for Passenger。从开始到结束,部署大约花了我10分钟。 - mlambie

10
今天早上,DHH在他自己的博客上谈到了这个话题:
但不知何故,Passenger的信息传递速度有些慢。已经有很多大型网站在上面运行了。其中包括Shopify、MTV、Geni、Yammer,我们很快将把Ta-da List移过去,然后希望尽快将其他37signals套件也迁移过来。
因此,虽然仍然有理由运行您自己的自定义多层设置和手动配置的组件,就像有人因为具体情况而回避mod_php一样,但我认为我们终于找到了一个默认答案。一个不需要您真正考虑Rails应用程序的第一次部署的东西。一个只是开箱即用的东西。即使这个框是共享主机!

http://www.loudthinking.com/posts/30-myth-1-rails-is-hard-to-deploy

Tobias Lütke谈论将Shopify(每天100万个请求)切换到Passenger:

所有这些意味着,在正常操作期间,Shopify使用的总内存量从平均9GB降至平均5GB。我们在更多的Shopify进程和更多的memcached空间之间平均分配了节省下来的资源,使我们的平均响应时间从210毫秒降至130毫秒,而流量在过去几个月中增长了30%。

总之:我目前看不出选择不同的部署策略的理由。它简单、完整、快速且有良好的文档记录。

http://blog.leetsoft.com/2008/11/15/passenger


4
过去18个月,我们一直使用旧版的nginx -> mongrel堆栈,虽然第一次设置不容易,但它已经被证明是灵活的,并且为我们处理了一些非常高流量的网站。特别是Nginx非常稳定和快速,如果你可以让你的应用程序进行页面缓存,你就可以处理大量请求。
卡住的mongrels一直是一个问题,所以我们使用monit在它们行为异常时杀死它们。同样,这并不完全容易设置,但是我们在许多网站上使用了相同的过程。
我们还没有尝试过passenger,因此可能更容易和更稳定,我会推荐其他回答者对此进行评估,我只能说,你完全可以使用nginx和mongrel构建一个坚实的堆栈。

2

我们已经从NginX+Mongrel转换为Passenger。

我完全相信,尽管有些非常聪明的人支持NginX和Mongrel集群,但Passenger将成为Rails的新标准。最近在Passenger方面的进展使其得到了极大的推动。

我们当前的配置大致如下:

Web服务器

  • Ubuntu 8.04 LTS
  • 在Apache2上使用Phusion Passenger
  • MRI Ruby 1.8.6及其相关组件(来自apt)
  • Ruby Gems 1.3.0(从源代码安装)

数据库服务器

  • Centos 5
  • MySQL Cluster(我们刚刚转换到这个,但它很有前途)

通过采用相同的Linux发行版,我们能够编写Capitrano脚本来帮助部署(配置上的轻微差异是许多服务故障的根源),并简化我们的生活。


1

看看Litespeed。你可以获得一个免费版本,它可以在1个CPU上运行,或者付费获得多个CPU。它有点昂贵,但非常稳定,并且能够出色地处理Rails(即使用更少的内存,并且监视和设置的开销更小)。我在上面运行了大量的应用程序,它从未出现过问题。


1

我们也从Mongrel切换到了mod_passenger,发现稳定性大大提高,而且设置和维护所需的工作量也相应减少。是个不错的选择。


1

另一个宝藏:

Josh Peek的Slicehost gem充满了比Deprec更简单、更有组织的Capistrano配方。里面没有任何特别针对Slicehost的内容。


0

我正在使用Ubuntu Hardy上的Apache2和Passenger托管我的新应用程序。对于大多数情况来说,这似乎是最简单和最好的选择。我刚加入Slicehost.com以实现这一目的。他们似乎得到了很好的评价,并且拥有一流主机中最具竞争力的价格。

我无法真正为他们背书,因为我是一个新客户,但是他们提供的指南和支持选项范围令人印象深刻。

您没有提及的是您的应用程序有多大和受欢迎程度如何。这个标准可能会影响决策过程。


0

Capistrano + Deprec 用于在Ubuntu上设置我的堆栈并物理管理部署。

Nginx代理到Mongrel集群用于服务器架构。虽然不是最新的、最前沿的技术,但它运行良好,文档编写得很好,并且即使在小型VPS上工作时也非常高效。假设您没有损坏应用程序,您可以使用128 MB Slicehost VPS进行Slashdot,它仍然可以继续工作。

话虽如此:第一次遇到了很多问题,直到我弄清楚Nginx的实际工作原理。之后它就很棒了——就像一个带有轻微俄语口音的小Apachelet。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接