听到Rails部署这两词,可能你首先想到的是下面这堆东西:
* CGI
* Apache/mod_fastcgi
* Lighttpd/fcgi
* Apache2/mod_fcgi
* Lighttpd/SCGI
* Lightspeed
但时代已经变了,新时代需要新思维
Mongrel:The year of the dog
Mongrel是由Zed Shaw完成的一个HTTP Server,它:
* 使用Ragel + C的快速HTTP解析
* 使用C的快速URI过滤器
* 堆栈式请求处理
* 配置灵活
* 安全同时兼容RFC的HTTP解析器
Mongrel就足够了?
答案是:不够,因为:
* Rails请求分发需要使用互斥锁
* 一个Mongrel实例只能同时处理一个请求
* 需要使用Mongrel_cluster创建多个实例来获取可伸缩性
因此,你仍然需要一个前端HTTP Server,幸好有一大堆:
* Pen,Pound,Balance,Haproxy(不支持静态文件,只是代理)
* Lightspeed(支持静态文件和代理)
* Apache2.2.x/mod_proxy_balancer(支持静态文件和代理)
这就搞定了?还不行:
* Pen(不支持SSL,不能限制连接速率)
* Pound(不支持高负载,不能限制连接速率)
* Haproxy(可限制连接速率,性能非常高,不支持静态文件)
* Lightspeed(免费版功能严重残缺)
* Apache2.2.x(没什么不好,就是:太臃肿了)
那怎么办?
Nginx:From Russia, with Love
Nginx有什么好处:
* 专为性能优化而开发,性能是其最重要的考量
* 非常小的资源占用
* 经过考验的高负载支持,没有内存泄漏
* 杀手级的Rewrite及Proxy模块
* 平易近人的作者以及快速扩大的社区
答案有了:Nginx + Mongrel,现在
* Apache很清闲了,它只需要负责mod_dav_svn就可以了
* 灵活的nginx.conf语法可以很轻易的搞定Rails Cache及动态请求
* 还有就是:快,快,快
* 我有说过快吗?
当然还有一些问题:
* Nginx会自动缓冲文件上传,因此将失去mongrel_upload_progress支持
* Proxy模块暂时还不支持连接速率限制
完美的部署就这样产生了:
* Linux
* Nginx
* Mongrel(Mongrel_cluster)
* Monit
就这么完了?还有一点,上面讲到过Mongrel的问题:
* 不能同时处理多个请求
* Rails分发需要取得互斥锁
* 还有多线程切换
这些都会损耗性能,因此我们需要新思维
Swiftiply: Evented Mongrel
Swiftiply事实上是Mongrel的修订版,那么它对Mongrel做了什么:
* 去除了Mongrel中对线程和Socket的处理
* 使用EventMachine的事件循环来代替
* Mongrel成了单线程,事件驱动
* 显著的速度及IO吞吐量提升
* 即使高并发,也没有不良症状(性能下降及内存泄漏)
你可能疑惑为何单线程会优于多线程,这是因为:
* Ruby的绿色线程进行上下文切换时需要拷贝大量的状态信息
* 互斥锁非常昂贵
* 单个进程的IO吞吐量有限
* 事件驱动意味着更紧凑的循环已经回调处理
* 由于节省了进程切换的时间,因此单线程可以将更多的精力集中到网络IO上。
Swiftiply还有一个好处:它可以启动多个Mongrel,但只使用一个端口。
分享到:
- 2009-11-10 17:11
- 浏览 1618
- 评论(9)
- 论坛回复 / 浏览 (10 / 7383)
- 查看更多
相关推荐
在部署方面,书中可能会介绍如何将Rails应用部署到各种服务器环境,如Heroku、AWS或自托管的服务器上,以及如何配置Nginx或Apache作为反向代理。还会涵盖持续集成和自动化测试,如使用Jenkins或Travis CI,确保代码...
《The Art of Rails》是Edward Benson撰写的一本关于Ruby on Rails框架的著作,它深入浅出地揭示了这个强大Web开发平台的艺术与精髓。Rails,作为Ruby语言的一个流行框架,以其“约定优于配置”(Convention Over ...
### Wrox《Rails的艺术》(2008年5月版)知识点概览 #### 一、书籍基本信息 - **书名**:《Rails的艺术》(The Art of Rails) - **作者**:Edward Benson - **出版社**:Wiley Publishing, Inc. - **出版日期**:...
书中深入探讨了诸如用户管理、安全性、时区处理、国际化、团队协作、自动化构建任务、部署生产环境服务器、网站安全加固以及如何利用Rails社区中的优秀资源等内容。 #### 知识点详解 **第1章:构建资源** - **...
部署方面,Rails应用常常使用Capistrano进行自动化部署,或者配合Docker和Heroku等云平台进行托管。在生产环境中,`config/environments/production.rb`配置文件会设置生产环境的具体参数。 总的来说,"rails-...
RuPaul's Drag Race是一档广受欢迎的电视比赛节目,关注drag queen的艺术表演和竞赛。通过这个API,开发者和爱好者可以获取到关于参赛选手、比赛结果、挑战细节等各种信息,用于创建自己的应用或者数据分析项目。 ...
部署说明确保在您的系统上安装了Ruby。 发射命令提示符并运行命令: # Make sure Rails is installedruby -v# If you see Ruby and Rails version then you are good to start, other wise Setup Ruby On Rails on ...
满足概述主页 登录 注册 搜索 发现 喜欢的歌曲 喜欢的相册 关注的艺术家 音乐播放器技术领域Ruby&Rails版本Ruby 2.5.1 Ruby on Rails 5.2.4.4 系统依赖webpack webpack-cli react react-dom react-router-dom redux...
Art Locale从Rails API后端获取数据,并将React-Redux用于客户端路由和渲染。 该应用程序允许用户将艺术家添加到应用程序,然后将博物馆添加到每个艺术家。 每个艺术家都有许多博物馆,博物馆属于一个艺术家。 ...
12. **部署**:Rails应用通常部署在Heroku、AWS或DigitalOcean等云平台上,使用Capistrano进行自动化部署。 在"bandfeels-master"这个项目中,我们可以看到源代码包含了Rails应用的所有组成部分,例如models(艺术...
虽然最终部署是在Dokku上进行,但可以通过部署到Heroku来工作。箱子Bash脚本用于包装常见的复杂命令。设计网站的艺术品大师。 设计采用Affinity Designer格式。滑轨BCS.io网站的Rails整体。地貌Terraform配置特定于...
10. **部署**:Rails应用通常部署在像Heroku这样的云平台,或者使用Capistrano进行自动化部署到服务器。 总结来说,hipsteranimals.com可能是由一个使用Ruby on Rails框架开发的Web应用,它利用了Ruby的生产力和...
艺术场景-狂欢 内容 建立和管理产品库存-了解Spree ::产品模型 数据重组:匹配Spree模式 如何? 使用数据移位 Datashift的替代品 客户互动与关系 授权与认证 交易消息和市场营销 导出客户数据库 库存管理 订单满额 ...
TomDoc 测试:RSpec 监控方式配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明 开源电子商务平台的比较大礼包语言:Ruby 框架:Ruby on Rails(MVC) Magento 语言:...
概述_项目名称Déprimé艺术家该项目的灵感来自于我对艺术和摄影的热爱。 因此,我决定为艺术家创建一个网站,在该网站上发布作品,活动或他们想要的任何东西。... Ruby on Rails 用于创建应用程序的后端。 Post
克里斯蒂娜·舒尔茨(Christina Schultz) 艺术家和演员克里斯蒂娜·舒尔茨(Christina Schultz)使用的网站科技栈应用程序后端是 ,这是一个使用Ruby on Rails框架以Ruby语言编写的应用程序。 如果您需要开发环境,...
自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版 系统依赖 配置 数据库创建 ... 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。
自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖组态数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...
10. **部署**:完成开发后,开发者还需要了解如何将应用部署到生产环境,如Heroku或AWS等云平台。 通过"pinteresting"项目,开发者不仅能够掌握Rails的基本概念,还能深入理解Web开发的整个流程,包括前后端交互、...
"Portfolio"通常指的是个人或团队在特定领域,如编程、设计或艺术,展示其作品和技能的集合。在这个Ruby相关的"portfolio"项目中,我们可能找到一个用于展示编程作品或服务的Web应用示例。 这个名为"portfolio-...