尝试用capistrano部署ruby on rails应用
by Robin Lu on Aug.27, 2006, about rubyonrails
部署网络应用服务是很麻烦的事情,安装程序,升级数据库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上部署碰到了一点麻烦。总的来说还是比较方便的。
2 Comments for this entry
5 Trackbacks / Pingbacks for this entry
-
Windows平台上使用 capistrano 部署 ruby on rails 应用 at Caiwangqin’s blog
October 11th, 2006 on 3:47 pm[...] 石锅拌饭写了一篇BLOG:尝试用capistrano部署ruby on rails应用,但新手在实际应用时还是会有不少麻烦,尤其是国内很多人都是在Windows平台上开发Rails Application, capistrano 是不可以从 Windows 平台上 rake deploy 到 Linux 上的。 [...]
-
links for 2006-10-11 « Caiwangqin’s delicious bog
October 12th, 2006 on 7:18 am[...] 尝试用capistrano部署ruby on rails应用 » 石锅拌饭 | 互联网 Mac & 软件开发 (tags: rails capistrano) [...]
-
Suave’s Blog » links for 2006-11-07
November 8th, 2006 on 8:57 am[...] 尝试用capistrano部署ruby on rails应用 » 石锅拌饭 | 互联网 Mac & 软件开发 一个方便rails应用部署的工具 (tags: rails deploy capistrano) [...]
-
links for 2007-08-27 « /tmp
August 28th, 2007 on 12:21 am[...] 尝试用capistrano部署ruby on rails应用 » 石锅拌饭 | 互联网 Mac & 软件开发 (tags: Rails capistrano deployment) [...]
-
新部署时代 » 石锅拌饭 | 互联网 Mac & 软件开发
May 15th, 2008 on 11:24 am[...] 从上一次写通过capistrano来部署Ruby On Rails应用,居然已经是一年九个月以前了,在这段时间里,Ruby On Rails,Capistrano都有着不小的进步和变化,git慢慢开始取代svn成为大家首选的SCM.与时俱进,来看看如何用Capistrano 2.3配合git和ssh来部署Ruby On Rails + Mongrel的应用. [...]
September 5th, 2006 on 8:38 pm
终于从1.1.0重新支持reaper了
不知道你遇到过一个问题没有
我有一个upload目录(是用户上传资料,不在svn中),每次更新,capistrano都重新建立一个新目录,导致新应用upload里面的文件都丢失了,俺得手动把他们移动到share里面然后作link回当前版本的目录, 不知道兄台如何搞定的?
September 5th, 2006 on 9:19 pm
你可以查看capistrano在服务器端创建的目录结构,除了current, release还有一个叫shared,在update_code这个action中,每次会把shared/log连接到新release中的/log,把shared/system连接到新release中的system,这样保证了每次更新后log目录和system目录都是不变的。
对于你的问题可以有两个做法,一个就是把upload目录放在shared/system目录下,这样做最简单。另一个方法,就是把upload目录放在shared/目录下,然后自己写一个task来完成ln的过程,这个稍微麻烦一些。