写点什么

关注部署:谈 Rails 应用的最后一公里

  • 2008-01-15
  • 本文字数:1912 字

    阅读完需:约 6 分钟

基于 Rails 框架应用开发的普及,在为用户带来众多创造性应用的同时,也赋予了开发者令人兴奋的高效与快捷体验。使用 Rails 开发 Web 应用的最后一个步骤,是要把 Ruby 代码从开发测试环境中迁移到实际生产模式之下。相比于开发过程来说,应用的部署并非易事。如何保证部署后站点的稳定和健壮性,并且可以从容应对大规模的并发访问,每一位富有经验的开发者或许都有自己的一套途径,就此,InfoQ 中文站汇总了近期 Rails 部署问题的各方面观点,为您提供参考。

早在 Rails 应用普及之初,就时常会听见针对 Rails 部署问题的抱怨。对于 PHP,一直以来都是以成熟的 LAMP 模式进行部署,讨论主要是集中在如何有效的进行服务器规模的拓展等等。而 Rails 方面则是没有统一的规则,Web 服务器的组合方式和部署工具也都有各自的特色,应用的部署对开发新手来说,是个常会产生困惑的问题,在题为“我不喜欢 RoR 的原因”的帖子中,一位开发者提到:

RoR 无疑是目前最具生产效率的开发框架之一,实现同样的应用,确使得开发时间缩减到原先的一半。但令我感到困扰的是,RoR 对于开发者的确具有吸引力,但客户却并不这么认为。比方说,Rails 应用的部署方式非常复杂,客户并不熟悉如何将开发好的应用部署在自己的服务器上,并且他们不喜欢使用命令行和脚本来操作 Rails 应用。

的确,相比 PHP 应用 LAMP 模式的部署,Rails 的可选方案非常多。保持站点的稳定性和健壮性,所涉及的不仅仅是 Rails 或 Ruby 开发相关的技术,还有很多因素来自于 Web 服务器和应用服务器的选择与搭配。Rails 部署常见的架构中,前端服务器加多个进程处理的方式如 Fastcgi,Mongrel 的选择以及与 Web 服务器的搭配使用,往往会给用户造成困扰。在《应用 Rails 进行敏捷 Web 开发》一书中,对于 Rails 的部署过程也作了简单的描述,但是所提供的部署方式并不十分合适于大规模网站的并发访问。论坛里的讨论中,常会针对于 Lighttpd+FastCGI、Nginx+Mongrel、Apache+FastCGI 等不同的搭配模式展开讨论。对于 Mongrel 服务器,Robbin 在文章“ RoR 部署方案深度剖析”中评价道:

我们假设使用服务器端程序控制带权限的文件下载,某用户下载的是一个 100MB 的文件,该用户使用了多线程下载工具,他开了 10 个线程并发下载,那么每个线程 Mongrel 在响应之后,都会把整个文件读入到内存的 StringIO 对象当中,所以总共会创建出来 10 个 StringIO 对象保存 10 份文件内 容,所以 Mongrel 的内存会一下暴涨到 1GB 以上。而且最可怕的是,即使当用户下载结束以后,Mongrel 的内存都不会迅速回落,而是一直保持如此 高的内存占用,这是因为 Ruby 的 GC 机制不好,不能够及时进行垃圾回收。

对此,robinlu 根据自己的 Rails 部署经验写道

Mongrel 处理 rails request 和静态文件使用的是不同的 handler。处理静态文件用的是 DirHandler,DirHandler 没有通过调用 response 的 start 方法使用到 StringIO, 而是直接调用了 response 的 send_file 方法,直接 write socket。验证过程非常简单,自己起一个 mongrel,在 public 下放一个 100M 的文件,通过浏览器下载一下。在我的 mac 上, 本来是 76M 的 mongrel,在下载结束后是 74M,下载过程中也一直小于 80M,最低到过 68M。无论是过程中还是结束后,都没有出现占用内存暴涨的现象。

的确,针对 Rails 部署的 Web 服务器与应用服务器的搭配方案,会令客户面对众多的选择,并且 JVM 之上的 JRuby 以及微软.Net 平台上的 Ruby 运行环境,都可能会使得 Rails 的部署呈现多元化发展的趋势。Robbin 在文章中对于 JavaEye 站点部署方案的选择做出了如下的总结:

Lighttpd+FastCGI 是性能最佳,服务器资源消耗最少的 RoR 部署方案,事实上目前 RoR 网站部署使用最多最流行的也是 Lighttpd+FastCGI 方式,而 JavaEye 网站,自然也是这种方式的部署。因此我们可以对各种方案进行一个性能优劣的排队,即 Lighttpd+FastCGI 是性能最佳方案,而 Apache+FastCGI 是性能最差方案。

从设计架构上来说,对静态文件的处理应尽量由 Web 服务器前端处理,避免多线程下载对 cpu 和带宽的影响。搭配的方式有很多,方案选择的优劣也不能一概而论,需要根据具体情况做出最合适自身的选择。在 InfoQ 中文站之前的一篇新闻“与时俱进的轻量级Web 服务器”中,也解释了Lighttpd+FastCGI 成为目前Rails 网站优秀部署方案的原因。对于各种选择和经验之谈,毕竟是仁者见仁、智者见智的事情,但无疑,关注小型轻量级服务器的发展,及其自动化部署工具和一站式集成化生产环境,都会给应用的部署上线带来有益的帮助。

关于应用服务器部署的更多信息,可以在InfoQ 中文站的部署应用服务器相关主题,以及 ChinaonRails 服务器架构讨论区中详细了解。

2008-01-15 07:093463
用户头像

发布了 74 篇内容, 共 15.3 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

为什么 OpenSearch 向量检索能提速 13 倍

阿里云大数据AI技术

阿里云 向量检索 OpenSearch

I2:产品运营大树

执于业务

CAD如何绘制圆弧?只需4步,轻松搞定!

在路上

cad cad看图 CAD看图王

海外网红推广终极指南:从0到1找到并搞定优质网红的完整流程

Wolink

跨境电商 海外社媒营销 海外营销推广 海外红人营销 品牌推广

首都在线携手亿点云:同燃算力星河,廿载云帆启新程

极客天地

Cursor 2.0 扩展 Composer 功能,助力上下文感知式开发

JavaEdge

cursor

阿里云 RDS PostgreSQL 可观测最佳实践

观测云

postgresql 阿里云

不止于警报:5步将出海媒体监控升级为主动的“声誉防御”战略

沃观Wovision

舆情监测 海外舆情监测 舆情监测网站 全球舆情监测

2025年量子计算与通信技术国际学术会议(ICQCT 2025)

搞科研的小刘

通信技术

大数据-145 Apache Kudu 架构与实战:RowSet、分区与 Raft 全面解析

武子康

Java 大数据 spark 分布式 Apache Kudu

CAD图纸如何测量?详细操作集锦来了

在路上

cad

数据源决定成败:深度剖析海外舆情工具的数据覆盖与准确性

沃观Wovision

舆情监测系统 海外舆情平台

出海营销人必备:2025年最值得关注的出海媒体监测新趋势

沃观Wovision

出海企业 出海舆情 出海媒体监测 社交媒体监测

华为云 Serverless 云原生基础设施 | 极简体验,加速业务创新

华为云原生团队

云计算 容器 云原生

正式启动!CCF-网易雷火联合基金2025年二期项目申请指南

网易伏羲

人工智能 网易伏羲 游戏AI cncc

荣耀智能体创意大赛火热启幕

荣耀开发者服务平台

荣耀开发者服务平台 荣耀YOYO智能体 YOYO智能体大赛

lua-zlib模块安装与使用

天翼云开发者社区

CDN 网络

从“拦路虎”到“修路工”:基于AhaEdit的广告素材修复

快手技术

人工智能 技术 大模型 广告审核

从需求到落地:MyEMS赋能企业开源能源管理的实战指南

开源能源管理系统

开源 能源管理系统

构建可用于生产环境的AI智能体

码界行者

AI智能体

第七届管理科学信息化与经济创新发展国际学术会议 (MSIEID 2025)

搞科研的小刘

信息化

海外网红营销服务公司如何用创意内容策略提升网红营销转化率300%

Wolink

企业出海 品牌营销 海外营销推广 海外红人营销

东南亚vs欧美?2026最具潜力的跨境出海市场深度解析

Wolink

企业出海 跨境电商 海外社媒营销 海外营销推广

传统企业转型之路:制造业的跨境出海实战思考

Wolink

企业出海 海外社媒营销 海外营销推广 品牌推广

切实技能清单树

执于业务

第二届智能机器人与自动控制国际学术会议 (IRAC 2025)

搞科研的小刘

机器人

B2B企业必看:如何利用海外平台推广精准开发海外高端客户?

Wolink

企业出海 跨境贸易 跨境电商 海外营销推广

第二届电子信息与信号处理国际学术研讨会(EISP 2025)

搞科研的小刘

信号处理

应对 “读放大” 问题的新方法 —— OceanBase 中的 Merge-On-Write 表

老纪的技术唠嗑局

数据库 列存

中小企业如何选择最合适的出海舆情监测网站

沃观Wovision

海外舆情监测 舆情监测网站 出海舆情

第六届智能电网与能源工程国际学术会议(SGEE 2025)

搞科研的小刘

能源工程

关注部署:谈Rails应用的最后一公里_Ruby_高昂_InfoQ精选文章