Capistrano Setup Practice

cap

Offical Site: http://capistranorb.com/
Github: https://github.com/capistrano/capistrano

配合着 Chef,用 Cap 发布 Rails 有近一年了。前段又试着总结如何更好的发布非 Rails 项目。


Deploy prepare

每个项目在 deploy 前都会有一些准备工作,像准备发布目录,创建一些配置文件保证发布成功。但 Capistrano 3 在这一块是没有显式规定的。

之前的做法是 cap prod deploy:prepare,在服务器端创建 Rails 所需要的配置和启动脚本。


Setup hook

实践段时间后,发现了一些更好的做法:

有一个setup的hook,不做任何事(理论上,这一块应属于 Cap 本身,它应提供一个类似于cap prod deploy:check。)

Setup tasks

为每个环境的配置,都有其对应的setup task,设为before setup,每个task都可以单独执行和配置。

  • self:deployto
  • rails:database.yml
  • rails:secrets.yml
  • rails:unicorn.rb
  • rails:unicorn.sh
  • nginx:nginx.conf
  • nginx:cert
  • other…

Cap 3 with Additive Tasks

Overriding Capistrano tasks 中有描述,如果定义两个相同名字的task,在Cap 3中是追加方式,都会执行。

也就是说:上文的hook是不需要的。每个task只要自己实现setup即可同时进行任务。

Using

Add to project

Gemfile
1
gem 'capistrano-setup'
Capfile
1
2
3
4
5
6
7
require capistrano/setup
# if you need generate database.yml secret.yml
require capistrano/setup/rails
# for unicorn.rb unicorn_$project.sh
require capistrano/setup/unicorn
# for nginx
require capistrano/setup/nginx

deploy config

deploy.rb
1
# config with cap setup

RUN

1
2
3
4
5
6
$ cap prod setup
# 单独安装
$ cap prod setup:check
$ cap prod setup:unicorn
$ cap prod setup:rails

REF::