相关主题
新部署时代
从上一次写通过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
和应用相关的配置:
1 2 3 4 5 | 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的方式.
使用者相关的配置:
1 2 | set :user, "robin" set :runner, "www" |
大部分部署指令会以:user设定的身份去运行,但和启动应用服务器相关的指令会以:runner设置的身份去运行,缺省的runner是’app’,如果你是’www’或者其他什么用户,最好设置一下.
capistrano2.3支持git,git相关的配置:
1 2 | set :repository, "ssh://mydomain.com/git/myapp.git" set :scm, "git" |
第一行设置repository的url.第二行指定scm是git.
另外还可以设置访问git所需的密码
1 | set :scm_passphrase, "p00p" |
如果项目比较大,可以做shallow clone,节省部署时间:
1 | set :git_shallow_clone, 1 |
也可以使用Remote Cache,避免每次都clone
1 | set :deploy_via, :remote_cache |
对于mongrel,确认你安装了最新版本的mongrel_cluster,我这里的版本是1.0.5.新版本中有针对capistrano 2.x的修正.
和mongrel相关的配置:
1 2 3 | 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
1 | /usr/local/bin/mongrel_rails cluster::start -C /path/current/config/mongrel_cluster.yml |
记住要把path换成你deploy_to的目录,还要给这个文件执行权限.
1 | chmod 755 ./script/spin |
配置到这里基本就完成了.
部署
第一次部署需要运行下面的命令:
1 | cap deploy:setup |
这个命令会在服务器上配置好相关的目录结构.然后再运行:
1 | cap deploy:check |
检查目录结构是否配置正确.
第一次部署用的命令是:
1 | cap deploy:cold |
以后部署都可以直接用:
1 | cap deploy |
如果发生问题要rollback可以用:
1 | cap deploy:rollback |
参考资料
Capistrano: Rails
Deploying with Capistrano - Git Guides
Deploying Rails (2.0) to Mongrel with Capistrano 2.1






