新部署时代

从上一次写通过capistrano来部署Ruby On Rails应用,居然已经是一年九个月以前了,在这段时间里,Ruby On Rails,Capistrano都有着不小的进步和变化,git慢慢开始取代svn成为大家首选的SCM.与时俱进,来看看如何用Capistrano 2.3配合git和ssh来部署Ruby On Rails + Mongrel的应用.

Capify

首先,在项目目录中运行:

capify .

生成相关的deploy文件.我们需要关心的是由这个命令生成的config/deploy.rb文件.这个文件由Capfile加载.

配置deploy.rb

和应用相关的配置:

set :application, "myapp"
role :web, "www.mydomain.com"
role :app, "www.mydomain.com"
role :db,  "www.mydomain.com"
set :deploy_to, "/var/app/#{application}"

这部分和capistrano 1.x基本相同.在部署的时候,会先尝试public key方式连接合服务器,失败后会尝试password方式.建议大家都使用public key的方式.

使用者相关的配置:

set :user, "robin"
set :runner, "www"

大部分部署指令会以:user设定的身份去运行,但和启动应用服务器相关的指令会以:runner设置的身份去运行,缺省的runner是’app’,如果你是’www’或者其他什么用户,最好设置一下.

capistrano2.3支持git,git相关的配置:

set :repository,  "ssh://mydomain.com/git/myapp.git"
set :scm, "git"

第一行设置repository的url.第二行指定scm是git.
另外还可以设置访问git所需的密码


set :scm_passphrase, "p00p"

如果项目比较大,可以做shallow clone,节省部署时间:


set :git_shallow_clone, 1

也可以使用Remote Cache,避免每次都clone


set :deploy_via, :remote_cache

对于mongrel,确认你安装了最新版本的mongrel_cluster,我这里的版本是1.0.5.新版本中有针对capistrano 2.x的修正.
和mongrel相关的配置:


require 'mongrel_cluster/recipes'
set :mongrel_conf, "#{deploy_to}/current/config/mongrel_cluster.yml"
set :mongrel_user, "apprunner"

第一行加载了mongrel_cluster的recipes,重载了start/stop等命令,保证每次重启的是mongrel.第二行指定了mongrel_cluster配置文件的位置.第三行指定了以什么身份来运行mongrel.

最后需要写一个spin脚本,放在./script目录下,capistrano会用它来启动mongrel


/usr/local/bin/mongrel_rails cluster::start -C /path/current/config/mongrel_cluster.yml

记住要把path换成你deploy_to的目录,还要给这个文件执行权限.

chmod 755 ./script/spin

配置到这里基本就完成了.

部署

第一次部署需要运行下面的命令:


cap deploy:setup

这个命令会在服务器上配置好相关的目录结构.然后再运行:


cap deploy:check

检查目录结构是否配置正确.
第一次部署用的命令是:


cap deploy:cold

以后部署都可以直接用:


cap deploy

如果发生问题要rollback可以用:


cap deploy:rollback

参考资料

Capistrano: Rails
Deploying with Capistrano – Git Guides
Deploying Rails (2.0) to Mongrel with Capistrano 2.1

1 thought on “新部署时代

Comments are closed.