石锅拌饭

新部署时代

by Robin Lu on May.15, 2008, about , , , ,

从上一次写通过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 Comment for this entry

Search

Archives

Browse by tags

agile apple blog book design ecto extension firefox git google hack ichm iphone keyword life mac madfox movie nonsense opensource plugin pm ruby rubyonrails sns software startup wordpress work 财帮子