尝试用capistrano部署ruby on rails应用

部署网络应用服务是很麻烦的事情,安装程序,升级数据库schema,切换版本,重启服务。步骤越多,人工参与越多,越容易出问题。 Capistrano是ruby on rails提供的部署方案,原名叫SwitchTower,多好记的名字,结果和人重了,换成现在这个,估计是为了赌气才起成这样,反正我再也不能拼对了。它集成了很多部署程序必须的步骤,借助ssh、版本管理系统(支持svn、cvs等等好几种)和rails的migration,只要做好配置,就可以在很大程度上实现部署自动化。 Capistrano的相关文档可以看这里。最简单的使用方法是: 安装 gem install capistrano 加入capistrano支持 cap –apply-to /path/to/my/app MyApplicationName 修改配置文件 修改config/deploy.rb文件。 初始化服务器上的运行环境 rake remote:exec ACTION=setup 这一步会连上你的服务器,创建一些目录。 部署 rake deploy 连接服务器,完成部署。 说起来好像挺简单,麻烦的地方主要在于修改config/deploy.rb配置文件。一般来说主要配置的参数包括: application:应用名。 repository:版本管理系统的链接URL。 web:web服务器名列表。 app:应用服务器列表。 db:数据库服务器列表。 user:ssh用户名。 deploy_to:应用部署路径。 如果你的svn链接需要用户名和密码,可以通过svn_username和svn_password配置,文档中没写,算我免费友情提示。 除了setup和deploy,缺省支持的命令主要有: disable_web:生成maintenance.html,你的系统需要能够自检测这个文件。 enable_web:删除maintenance.html。 update_code:和版本管理器做代码同步。 rollback_code:如果部署完发现有问题,可以用这个命令换回上一个。 restart:重启,其实就是调用了reaper。 migrate:在服务器端运行rake RAILS_ENV=#{rails_env} migrate。 deploy:其实就是update_code+symlink+restart。 deploy_with_migrations:update_code+migrate+symlink+restart。 rollback: rollback_code + restart。 还有一些其它的命令,具体可以查看gem capistrano安装目录下lib/recipes中的standard.rb。另外,可以自己在deploy.rb中定义新的命令。 目前的capistrano(版本1.1.0)还有一些局限,比如你所有服务器都必须使用同样的账号,这个让我在dreamhost上部署碰到了一点麻烦。总的来说还是比较方便的。

新浪的技术含量

今天订了一个新浪博客,这是我第一次订来自新浪的博客。在bloglines里看,感觉怪怪的,检查了一下feed,发现feed中description的部分是这样的: <DIV> <DIV><FONT SIZE=”4″>刚回来,看完大家评论,赶紧写几句:</FONT></DIV> <DIV> </DIV> <DIV><FONT SIZE=”4″>一很多人谈到采访中有情绪化的成份,是,在看对王晋生的采访的时候,我自己也几乎坐不住。这么冷口冷面?真要引以为戒。美国有个写专栏的老太太,也是写新闻评论的,写了三十年,有人后来有点讥诮地问她“你以谁的声音在说话?”</FONT></DIV> <DIV><FONT SIZE=”4″>老太太说,“理想中自己的声音”。</FONT></DIV> <DIV><FONT SIZE=”4″>弱点不可避免,但起码得知道弱点在哪里,理想的应该是什么样。</FONT></DIV> <DIV> </DIV> <DIV><FONT SIZE=”4″>二国防科工委为什么不采访?…唉,国防科工委…采,还是不采,这是个中国记者的哈姆雷特式问题,</FONT><FONT SIZE=”4″>谢谢大家中国国情式的理解。但是,希望我们的节目有跟踪深化报道的机会,明天我会打个电话看。</FONT></DIV> style和内容混在一起,多余的div元素,都污染到rss feed里了。包含这些垃圾代码的内容的有1625字节,纯粹内容是873字节。另一篇随便在新浪博客主页找的文章的feed的description更夸张,9034字节:2177字节。 以前曾经做过一些互联网标准技术传教的工作,新浪常常是被当作典型的测试用例的。那时候就知道,新浪的人是不懂互联网标准的,不曾想他们玩起rss feed来,也这么的新浪特色。 rss feed应该是带宽杀手,如果采用互联网标准,保守的估计至少能从rss节约一半以上的带宽。网页推行互联网标准,搞不好也有一半。不过人家可能更本不在乎这点钱。

苹果开发者大会及小道消息

WWDC公布了苹果下一代操作系统Leopard的细节,时间机器就是全文件系统的版本控制,Spaces也是我期待已久的功能。 早上看Slashdot得知Ruby On Rails将和Leopard绑定发行。每一个Rails核心开发者都使用的是苹果的系统,现在是苹果认可他们的时候了。 从原来的同事那里听到几个小道消息,一个是Leopard的“时间机器”是基于ZFS的,如果真是这样,那么Open Solaris中的ZFS被移植到Mac OS X上看来就成真了。还有一个就是Solaris中革命性的系统调试和监控工具DTrace也要集成到Leopard中。有了ZFS,借助DTrace,再加上Ruby On Rails,至少从功能上,Leopard在服务器端的野心也是不小。

参加了北京Ruby On Rails爱好者聚会

一直都希望国内也有RailConf这样的Ruby On Rails聚会,今天参加了DoChance组织的北京Ruby On Rails爱好者聚会,算是迈出了第一步。 来的大多数都是有Java背景的,和全世界的发展趋势基本相同。有两三个团队介绍了他们开发的产品,一个IBM的工程师讲了一些敏捷开发的经验。一个有很长时间ruby开发经验的程序员,介绍了一些使用Ruby的经验,很不错,但是他对performance问题的讨论我有些疑问,比如他说vector和list在大数据量时的比较并不是很全面,显然是针对很特殊的情况,另外将字符串当作Symbol处理的方式也不是ruby特有的,Interned String是非常普遍的做法,而且在创建成本大于比较成本的时候并不合算。可惜没有时间,如果能更深入讨论一下,一定会更有收获。因为坐的太靠前,被主持人点名救场,在完全没有准备的情况下介绍了一下用TextMate开发Ruby On Rails程序,因为有段时间没写RoR了,好多快捷方式都记不起来,很是丢人。 主持人提出了一些以后可以玩的主题,比如来一次Ruby On Rails的hackathon,我觉得都是非常好的主意。见到了一些久仰大名的人,Herock比我想象中瘦,SayOnly比我想象中沉稳。 题外话,博客吧改叫博来吧了,无线上网入口登陆不支持Safari和Firefox,苹果用户就不用光顾那里了。