`
robbin
  • 浏览: 4820534 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137001
社区版块
存档分类
最新评论

mod_rails尝鲜

    博客分类:
  • Ruby
阅读更多
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倒也很简单:

gem install passenger
passenger-install-apache2-module


安装好以后,他会提示你如下配置Apache(具体环境可能稍有不同):
LoadModule passenger_module /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so
RailsSpawnServer /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
RailsRuby /usr/local/ruby/bin/ruby

NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "/home/webroot/demo/public"
    ServerName 192.168.0.3
    ErrorLog "logs/rails-error_log"
    CustomLog "logs/rails-access_log" common
</VirtualHost>


前面三行是注册Apache的module,以及该module的相关启动脚本,后面就是标准的Apache虚拟主机配置方法了,指明rails项目的public路径就可以了。

在Apache运行起来之后,Apache启动了一个Rails的Passenger进程,该进程是用来管理ruby进程的启动关闭以及响应请求的,如果访问量比较大,该进程还会陆续启动子进程,来提高更多的ruby进程管理,如下所示:

root      5981  5980  0 13:37 ?        00:00:00 Passenger spawn server                                                       
root      6086  5981  0 13:40 ?        00:00:01 Passenger FrameworkSpawner: 2.0.2     
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



分享到:
评论
9 楼 zgd 2008-05-15  
我觉得还是mod_fcgid(不是mod_fastcgi)实际点
8 楼 leondu 2008-05-15  
hostingrails也已经提供mod_rails了
7 楼 zgd 2008-05-14  
dreamhost已经提供mod_rails了
6 楼 liyu212 2008-05-07  
为什么每个新出来的服务程序都说自己比以前的性能高呢??
5 楼 ShiningRay 2008-05-07  
passenger 在低并发的时候性能非常好,高并发局限于apache
关键是部署太方便了
4 楼 jejwe 2008-05-03  
看apache3有没有质的提升
3 楼 leondu 2008-04-14  
不过再mod_rails中提到的客户就包括了Dreamhost这样的虚拟空间提供商,因此Robbin说的“因此预期Rails虚拟主机提供商也不会采用mod_rails。”有待商榷。
2 楼 yawl 2008-04-14  
我的印象是,DHH是想用mod_rails代替目前最流行的mongrel的。和zed shaw前一段的表演很有关系。
1 楼 t0uch 2008-04-13  
这个东西到目前为止还是没有支持windows平台
如果可以支持win倒是首选,但现在看来仅仅在nix系统下可以用,性能又不如lighttpd和nginx,不见得就有多棒啊。实在不知为何DHH对这个东西赞扬有加。

相关推荐

    基于C++和多种语言的mod_rails Phusion Passenger设计源码

    本项目是基于C++和多种语言的mod_rails Phusion Passenger设计源码,包含4547个文件,其中包括3321个HPP文件、364个H文件、176个CPP文件、166个RB文件、63个C文件、56个JS文件、54个IPP文件、51个ERB文件和27个...

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    `weixin_rails_middleware` 是一个开源的 Ruby 框架中间件,设计用于帮助开发者轻松地在 Rails 应用程序中集成微信服务。这个中间件提供了与微信API交互的功能,包括验证微信服务器的请求、处理用户消息、以及发送...

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    factory_bot_rails:工厂机器人:heart_suit:Rails

    factory_bot_rails 用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_...

    bhl_rails_solr-源码.rar

    《深入解析bhl_rails_solr源码》 在当今的Web开发领域,Rails框架以其高效、简洁的设计理念,深受开发者喜爱。同时,Solr作为一款强大的全文搜索引擎,被广泛应用于各类复杂的数据检索场景。当这两者结合时,便诞生...

    jruby_on_rails

    【JRuby on Rails:简介】 JRuby on Rails 是一个基于 JRuby 实现的 Ruby on Rails 框架的版本,允许开发者在 Java 平台上利用 Rails 的强大功能进行 web 应用开发。Ruby on Rails(简称 Rails)是由 David ...

    avatars_for_rails:用于管理头像的 Rails gem

    化身对于Rails开发 Avatars For Rails 是一个完整的解决方案,可为模型提供头像支持。 它包括一个数据库迁移和带有 jquery.fileupload 和 jquery.jcrop 的视图 它依赖于回形针和 imagemagick 安装 添加到您的 ...

    awesome_rails_console, Rails 控制台增强使你的Rails 控制台更加出色.zip

    awesome_rails_console, Rails 控制台增强使你的Rails 控制台更加出色 使你的Rails 控制台非常出色这个 gem 是由使用pry生产,jazz_hands和 jazz_fingers的激发 was 。awesome_rails_console的优点是:减少 gem ...

    mid.zip_Rails

    《Ruby on Rails构建的商业级多数据库管理平台》 Rails,全称为Ruby on Rails,是基于Ruby编程语言的一款开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码可读性。"mid....

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    shopping_card_rails-源码.rar

    《购物车实现——深入解析"shopping_card_rails"源码》 在软件开发中,购物车功能是电子商务网站的核心组成部分,它允许用户选择商品并进行结算。本篇文章将深入探讨"shopping_card_rails"源码,揭示其在实现购物车...

    ruby_on_rails_创建一个博客项目.doc

    ruby_on_rails_创建一个博客项目.doc

    Api-api_on_rails.zip

    Api-api_on_rails.zip,学习使用rubyonrails5/6构建api的最佳实践学习使用rubyonrails5/6构建api的最佳实践。本书的目的不仅仅是教你如何用rails构建api。目的还在于教您如何用rails构建可伸缩和可维护的api,这意味...

    themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持.zip

    themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持 ThemesOnRails 安装安装最简单的方法是使用 Bundler 。将这里 gem 添加到你的Gemfile:gem 'themes_on_rails'如果要对 liquid 模板使用

    rbs_rails

    Ruby on Rails的RBS文件生成器。 安装 将此行添加到应用程序的Gemfile中: gem 'rbs_rails' , require : false 然后执行: $ bundle install 或自己安装为: $ gem install rbs_rails 用法 将以下代码放入lib/...

    angular_rails_csrf-源码.rar

    标题中的"angular_rails_csrf"是一个涉及到前端Angular.js框架与后端Rails框架之间的跨站请求伪造(CSRF)防护的项目。Angular.js是Google维护的一款强大的JavaScript框架,用于构建单页应用程序(SPA),而Rails则是一...

    JavaEye2.0_on_rails

    ### JavaEye2.0_on_rails:敏捷Web开发实践与Ruby on Rails的应用 #### 敏捷软件开发方法 - **背景**:传统软件工程方法在实际应用中面临着项目延期、成本超支以及软件质量不高的问题。为了克服这些挑战,业界提出...

    inspinia_admin_v2.5_Rails_Full_Version

    该模板包含的文件列表“inspinia_admin_v2.5_Rails_Full_Version”很可能包括以下组成部分: 1. **静态资源**:CSS样式文件、JavaScript脚本和图像资源。这些文件用于构建用户界面,包括响应式布局、图表、表单元素...

Global site tag (gtag.js) - Google Analytics