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
分享到:
- 2008-04-13 14:32
- 浏览 8031
- 评论(9)
- 论坛回复 / 浏览 (8 / 6333)
- 查看更多
相关推荐
agile_web_development_with_rails_3rd_edition.9994652073.pdf
weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin.
ruby_on_rails_3_入门教程(中文)
RestFul_Rails_Dev_v_0.1 RestFul_Rails_Dev_v_0.1
factory_bot_rails 用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_...
jruby_on_rails 开发的很好例子,可以看看,有助与初学者入门
Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统
化身对于Rails开发 Avatars For Rails 是一个完整的解决方案,可为模型提供头像支持。 它包括一个数据库迁移和带有 jquery.fileupload 和 jquery.jcrop 的视图 它依赖于回形针和 imagemagick 安装 添加到您的 ...
awesome_rails_console, Rails 控制台增强使你的Rails 控制台更加出色 使你的Rails 控制台非常出色这个 gem 是由使用pry生产,jazz_hands和 jazz_fingers的激发 was 。awesome_rails_console的优点是:减少 gem ...
ruby_on_rails 开发者实战 源代码上 1-12章 来之不易啊。仅供学习.
Ruby_on_Rails实践.rar
Windows7_Cygwin_Git_RVM_Ruby1.9.3_Rails3_MongoD B_Nginx_Unicorn_Rspec_Guard_Spork(2-Ruby on Rails3 安装配置
shopping_card_rails-源码.rar
ruby_on_rails_创建一个博客项目.doc
Api-api_on_rails.zip,学习使用rubyonrails5/6构建api的最佳实践学习使用rubyonrails5/6构建api的最佳实践。本书的目的不仅仅是教你如何用rails构建api。目的还在于教您如何用rails构建可伸缩和可维护的api,这意味...
themes_on_rails, 向 Rails 3/4/5 应用程序添加多个主题支持 ThemesOnRails 安装安装最简单的方法是使用 Bundler 。将这里 gem 添加到你的Gemfile:gem 'themes_on_rails'如果要对 liquid 模板使用
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
Ruby on Rails的RBS文件生成器。 安装 将此行添加到应用程序的Gemfile中: gem 'rbs_rails' , require : false 然后执行: $ bundle install 或自己安装为: $ gem install rbs_rails 用法 将以下代码放入lib/...
bhl_rails_solr-源码.rar
angular_rails_csrf-源码.rar