Capistrano 2.2.0

Riding Rails: Capistrano 2.2.0

Railsのデプロイツールとして有名な&複数台のサーバ管理に非常に便利なCapistranoの2.2.0がリリースされたとのこと。
主な変更点は以下。

  • ブロックを使って動的にroleの定義できるようになった
  • サーバを中心としたrole定義ができるようになった
  • 一度に接続する最大ホスト数の制限をオプションとして指定できるようになった
  • その他複数のSCMのサポートに関する機能追加

ちょっと見ていってみよう。

ブロックを使って動的にroleの定義できるようになった

やっつけの例だけど例えば引数で条件分岐する例。

role :app do
  if ARGV[1] == 'only_sv01'
    "sv01"
  else
    ["sv01", "sv02", "sv03"]
  end
end

まあ今までもif文とか普通に書けたわけだけど、これによってよりすっきり書けるようになったということなんだろう。

特に動的にする気がなくても管理するサーバが多いときには

role :app, "sv01", "sv02, "sv03", ... "sv99"

もしくは

role :app, "sv01"
role :app, "sv02"
role :app, "sv03"
 ...
role :app, "sv99"

とだらだら書いていたものをブロックを使って

role :app do
  [
    "sv01",
    "sv02",
    "sv03",
    ...
    "sv99",
  ]
end

といった風にすっきり書ける。
配列にできるのがちょっといい。

サーバを主体としたrole定義ができるようになった

従来のroleメソッドの他にserverというメソッドを使ってサーバとロールを結びつけることができるようになった。

server "sv01", :web
server "sv02", :web
server "sv03", :web, :app
server "db01", :db

サーバの数が少ない場合はこっちの書き方の方がわかりやすそう。
特にコストの都合でサーバの台数を確保できずに複数のロールを掛け持ちしているサーバが多い場合とか。

一度に接続する最大ホスト数の制限をオプションとして指定できるようになった

非常に大規模な環境で、例えば数百台のホストがあったりする場合。
一気にデプロイ処理が始まってしまうと、負荷が一気に高まってシステムのどこかが破綻することが考えられる。
そういうことが起きないようにするためのオプション。

taskメソッドおよびrunヘルパーのオプションに:max_hostsで最大同時接続数を指定することができる。

task :hoge, :max_hosts => 10 do
  ...
end

とか

task :hoge do
  run "ps -aux |grep httpd", :max_hosts => 10
end

とか書く。

例えば:max_hostsを10に設定すると、同時接続数は10台まで。
イコール同時にタスクの内容が処理されるサーバ台数は10台まで。
10台の枠にあぶれたサーバは自分の順番が回ってくるまで待たされる。

ちなみに10台だけ処理してタスクが終了するという意味ではないので誤解なきよう。
:max_hostsを指定しようがしまいが、最終的にはすべてのサーバでタスクの内容が処理される。

その他複数のSCMのサポートに関する機能追加

Git,Murcurial,Bzr,perforceといったバージョン管理システムに関する変更。

いろいろサポートしてるんだなぁ。
しかしどれも使ってないのでとりあえず他人事だ。

以上。

まあ最近とんと追っかけてなかったけど、リリース作業を頻繁にするようになるとやっぱりこういうツールが欲しくなるますね。

前の記事

Mac欲しい病

次の記事

Let’s note Y7CとY7Bの比較