Rails 难以部署?

David Heinemeier Hansson 最近开始写系列文章The Rails Myths,主要是对一些关于 Rails 的不实传言进行批驳。第一篇 Myth #1: Rails is hard to deploy,讲的是所有 Rails 开发者都非常关心的部署问题。

Rails 应用很难部署吗?我个人两年多的经验得出的结论是,可能会有些麻烦,但一点都不难。当然,我参与的一些项目都不大,日 PV 也没有几十万那种规模(不过那好象应该是扩展和伸缩的话题),但两年多的部署变化历程,现在看来其实非常简单:

起初,使用 Nginx + Mongrel Cluster,算是很经典的组合。这种方式结合 Capistrano 还是挺方便的。唯一稍嫌麻烦的是,如果服务器意外重启了,mongrel 实例遗留的 pid 文件会造成新实例无法启动。很糟糕,但可以忍受。

今年 Passenger (mod_rails) 横空出世。Passenger 吸引我的有三个地方:

  1. DHH 说:This could become very popular, very fast!

  2. 作者 Hongli Lai 的华人面孔和姓名

  3. 发布 Rails 应用可以用简单的 FTP 上传 + tmp/restart.txt 文件来实现

可惜的是,Passenger 必须跟 Apache 一起用(Hongli Lai 他们自己用 Nginx 作前端来均衡到不同的 Apache,不过那是另外一回事)。考虑到它的方便性,用 Apache 就用吧。

目前,手上的服务器和项目,都已经迁移到 Apache + Passenger 方案。效果相当不错,Capistrano 部署脚本也简单了不少。

我依然记得在蔚蓝时我们部署 asp.net 2 应用的方式:我们用自己编写的 MSBuild 脚本自动编译要发布的新版,然后上传生成的新版本至服务器 (Win2K3),手工覆盖原来的版本。如果应用 Capistrano 的一些办法进去,这个过程可以更自动化更方便一些,但整个蔚蓝网站编译就需要好几分钟(其实这速度已经不赖了)这个事实就让整个发布显得很慢。

部署 Rails 一点都不难,当然前提是你掌握了基本的知识和技能。