Capistrano v3を試してみる(1)

こんにちは,たにたにです.

Deployのためのツールとして有名なCapistranoですが,6月にバージョンアップしてv3になっていました.(いつの間にやら・・・)

v3になって今までプラグインを別に入れて使うのが当たり前だったcapistranoも,
Railsと分離したりMultistageを取り込んだりとずいぶん便利になったようです.
Railsにお世話にならない身としては,とてもありがたいですね.

そこで,新しくなったCapistranoがどんなものか試してみました.

* Gemsetの作成

とりあえずRVMでgemsetとつくっておき

$ mkdir capis-test && cd capis-test
$ rvm rvmrc create 2.0.0@capis-test
$ cd .

yesを入れてgemsetの作成を完了します."cd ."はそのままだとgemsetを読み込んでくれなかったのでその対策で.

* Bundle

Bundleの初期化をしてGemfileを作成します.

$ bundle init
Writing new Gemfile to /****/capis-test/Gemfile

Gemfileにcapistrano v3とrvmをを入れます

# A sample Gemfile
source "https://rubygems.org"
ruby "2.0.0"

# Deploy tools
group :deploy do
  gem 'capistrano', "~>3.0.0", github: 'capistrano/capistrano'
  gem 'capistrano-bundler', github: "capistrano/bundler" # cap bundle:installでデプロイ先のbundle環境をインストールできる
  gem 'capistrano-rvm', github: "capistrano/rvm" # setup時にRVMをインストールしてくれる
  # gem 'capistrano-rails', github: "capistrano/rails" # Railsを使う場合は入れる
end

最後にBundle installで完了

$ bundle install
Fetching git://github.com/capistrano/capistrano.git
....略
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

* Capistrano

Capistranoの初期化はcap installで行うことができるようになりました.

$ bundle exec cap install
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
Capified

Capifiedと出たらOK.Multistageに対応していることが生成されたディレクトリからも分かりますね.

生成されたconfig/deploy.rbを見ると,:deployというnamespaceが定義されています.RailsのためのStub?がなくなったせいか,ユーザが自由に書くスタイルになったようですね.
:ptyという変数が増えたり,Logを簡単にとることができるようになったようです.

# config/deploy.rb
set :application, 'my app name'
set :repo_url, 'git@example.com:me/my_repo.git'

# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }

# set :deploy_to, '/var/www/my_app'
# set :scm, :git

# set :format, :pretty
# set :log_level, :debug
# set :pty, true

# set :linked_files, %w{config/database.yml}
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

# set :default_env, { path: "/opt/ruby/bin:$PATH" }
# set :keep_releases, 5

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      # execute :touch, release_path.join('tmp/restart.txt')
    end
  end 

####  中略  ####

  after :finishing, 'deploy:cleanup'
end

ソースコードべたっと貼ると記事が長くなってよくないですね.

その(2)に続くことにします.