rails 项目的部署

如流,新一代智能工作平台

Phusion Passenger(mod_rails)正式发布了,它是Apache的一个模块,在Apache上安装好以后部署Rails应用也可以简单得像PHP一样:直接上传文件到某个目录就好了。

除了方便以外,mod_rails的性能也很不错,和常见的mongrel和thin都不相上下:
http://www.javaeye.com/news/1754

Rails的作者DHH和Ruby作者Matz更是对mod_rails赞誉有加:

David Heinemeier Hansson 写道

This could definitely become very popular, very fast ;)
Yukihiro Matsumoto 写道

It is often said that Rails is weak on deployment; PHP runs fairly fast just by uploading scripts. Rails is slow on development mode, and requires restarting on production mode (and bit complex to configure). modrails might be the answer for it.

你还在为Rails的部署配置头痛么?来试试看吧:
Install — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)

Robin的使用感受:
mod_rails尝鲜

关键字: mod_rails
Passenger(俗称mod_rails)是最近刚刚发布的Apache module项目,刚一出来就得到了诸多好评,JavaEye新闻也有两篇报道:

Rails部署也可以简单得像PHP一样
Passenger(mod_rails)新的RoR部署方式

其中性能评测更加令人印象深刻
 



好像还有人称,未来RoR的主流部署方式将是mod_rails,而且这个项目的作者还貌似一个华人,叫做“赖洪礼”,所有的这一切都让人挺有兴趣,于是我在周末也简单的安装和测试了一把。

如果已经安装好Apache和Ruby on Rails的环境,并且把Apache的bin目录和ruby的bin目录配置到PATH环境变量下面,那么安装Passenger倒也很简单:
 
Ruby代码
  1. gem install passenger   
  2. passenger-install-apache2-module  
 


安装好以后,他会提示你如下配置Apache(具体环境可能稍有不同):
Java代码
  1. LoadModule passenger_module /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so   
  2. RailsSpawnServer /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server   
  3. RailsRuby /usr/local/ruby/bin/ruby   
  4.   
  5. NameVirtualHost *:80  
  6.   
  7. <VirtualHost *:80>   
  8.      DocumentRoot "/home/webroot/demo/public"  
  9.      ServerName 192.168.0.3  
  10.      ErrorLog "logs/rails-error_log"  
  11.      CustomLog "logs/rails-access_log" common   
  12. </VirtualHost>  
前面三行是注册Apache的module,以及该module的相关启动脚本,后面就是标准的Apache虚拟主机配置方法了,指明rails项目的public路径就可以了。

在Apache运行起来之后,Apache启动了一个Rails的Passenger进程,该进程是用来管理ruby进程的启动关闭以及响应请求的,如果访问量比较大,该进程还会陆续启动子进程,来提高更多的ruby进程管理,如下所示:
 
Ruby代码
  1. root       5981   5980   0 13:37 ?         00:00:00 Passenger spawn server                                                          
  2. root       6086   5981   0 13:40 ?         00:00:01 Passenger FrameworkSpawner: 2.0.2        
  3. daemon     6350   6086   0 13:54 ?         00:00:00 Passenger ApplicationSpawner: /home/webroot/demo    

以上的3个ruby进程是控制进程,此外,还会根据web请求的数量,启动相应数量的Ruby进程来处理Rails请求。这些ruby进程在控制进程的控制下,当web请求负载高的时候,会动态创建更多进程,当web请求负载低的时候,就会动态销毁,以节省内存。控制进程和Rails进程之间使用Unix Socket来通讯。

mod_rails的大致原理就是这样的。这种运行方式有点类似Apache以mod_fastcgi方式来运行Rails,但因为通讯方式和控制进程都要好得多,因此不会出现mod_fastcgi的好多问题。

mod_rails提供了apache上面另外一种可以选择的Rails部署方式,但是这种部署运行方式也不可避免的带有致命缺陷。正因为ruby进程是动态创建,而我们知道Rails进程启动的时候是非常消耗CPU的操作,因此黑客可以很容易的通过瞬时发起数量巨大的并发web动态请求让服务器因为忙于创建大量的Rails进程而陷于瘫痪。

另外对于虚拟主机提供商来说,ruby进程的数量是根据请求量动态调整的,因此无法根据付费用户来分配限制相应的资源,这不像mongrel那样好控制用户使用的资源数量。因此预期Rails虚拟主机提供商也不会采用mod_rails。

最后我个人觉得,随着Lighttpd和nginx的崛起,Apache真的已经可以淘汰了,Apache这种多进程web服务器实在太消耗服务器资源,也太容易被DOS攻击了,任何依赖Apache的部署方案都有点过时了。

如果说要我推荐的话,Rails部署的性能首选还是Lighttpd+FastCGI,次选则可以考虑 nginx + thin/mongrel

引用自:http://www.javaeye.com/news/1874

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值