ランプの中身(Ruby on Railsのシステム開発)
ランプの中身(Ruby on Railsのシステム開発)では、株式会社ケイビーエムジェイのRuby on Railsエンジニアが蓄積したノウハウを公開しています。Ruby on Railに関する技術解説や実践的なノウハウなど、開発現場の技術に則したコンテンツを随時追加していきます。 初心者の方でもわかりやすい技術解説を心がけています。リクエスト、ご質問も受け付けいますので、ご気軽にコメントを記述して下さい。

< Railsで「Lost connecti... | メイン  |  gemコマンドの紹介... >

TrinityTの中身(Ruby
2008.03.25

簡単&便利 Capistranoのススメ (導入編)


ごきげんよう、TrinityTです。

桜も咲き始め春の到来を感じますね!

 

今日は最近になって使い始めたとても便利なツール、Capistranoについて説明します。

Railsを使っている人はもちろん、使っていない人両方にオススメです。

 

Capistranoって何?

簡単に言うと「複数の環境に同じ処理を同時に実行させる」ツールです。

・昔はSwitchTowerと呼ばれてました。

・RoR環境でしか使えないと誤解されがちだが、他の環境でも十二分に便利。

・(サービスがPerlで書かれてる)はてなでも導入

・RoR環境だと基本的なコマンドが揃っているため特に便利。

 

何がうれしいの?

WebアプリでよくあるパターンとしてAPサーバが複数ある場合に各サーバに対して全く同じ処理(APを転送&APサーバ再起動...etc)を行う場合ってありますよね?

そういう場合にCapistranoを導入すれば以下のようなメリットが生まれます。

・複数サーバに対する処理をコマンド一回で出来るようになる

・ほとんどの処理をCapistranoを介して行うように出来るので、運用がわかりやすくなる

 

補足

Capistranoは1台にインストールされていれば良い

基本的に「Capistranoの起動サーバ1台」にインストールされていれば良いです。(全てのサーバにインストールする必要は無い。)

 

並列処理 するサーバのユーザ、パスワードは同じにする

並列処理する関係上、ユーザ名とパスワードは同じものを設定しておく必要があります。

 

今回の前提

以下の環境で、既にruby,rubygemsはインストール済みとします。

・CentOS5.1

・ruby1.8.6

.rubygems0.9.2

また複数サーバが無いとメリットが感じにくいので、以下の3台構成を想定します。

・サーバtest IP:192.168.0.21 ※Capistrano実行

・サーバap1  IP:192.168.0.22

・サーバap2  IP:192.168.0.23

 

インストール方法  

gemで一発でインストール可能です。

gem install capistrano

インストール後は、ヘルプを出して確認しましょう。

cap -h

ついでにバージョンも確認します。最新版は2.2.0です。

gem list capistrano

>capistrano (2.2.0)

 

使用方法(Helloworld編)

まず、以下の内容のファイル「deploy.rb」を作成します。

# 基本定義 

set :application, "hoge"  #プロジェクト名
set :user, "hoge"           #sshユーザー名

set :password, "hoge"    #sshパスワード

 

# role定義 

role :test, "192.168.0.21"

role :ap, "192.168.0.22","192.168.0.23"

 

# タスク

task :hw, :roles => [:test, :ap] do

  run "echo HelloWorld! $HOSTNAME"

end

 

task :gb, :roles => [:test, :ap] do

  run "echo GoodBye! $HOSTNAME"

end

 

基本定義としてsshのアクセス情報などを書きます。

roleは各タスクを実行するサーバのIPアドレスorホスト名を書きます。

タスクとしてHelloworld、GoodByeをそれぞれ表示するものを定義しました。

「run」はssh定義ユーザでコマンド実行をするためのタスクです。(後述)

 

さて、それでは各タスクを実行してみましょう。

コマンドは「cap -f <定義ファイル名>  <タスク名>」で実行できます。

 

cap -f deploy.rb hw

>実行結果 

  * executing `hw'
  * executing "echo HelloWorld! $HOSTNAME"
    servers: ["192.168.0.21", "192.168.0.22","192.168.0.23"]
    [192.168.0.21] executing command
    [192.168.0.22] executing command
    [192.168.0.23] executing command
 ** [out :: 192.168.0.21] HelloWorld! test
 ** [out :: 192.168.0.22] HelloWorld! ap1
 ** [out :: 192.168.0.23] HelloWorld! ap2
    command finished

 

cap -f deploy.rb gb

>実行結果 

  * executing `gb'
  * executing "echo GoodBye! $HOSTNAME"
    servers: ["192.168.0.21", "192.168.0.22","192.168.0.23"]
    [192.168.0.21] executing command
    [192.168.0.22] executing command
    [192.168.0.23] executing command
 ** [out :: 192.168.0.21] GoodBye! test
 ** [out :: 192.168.0.22] GoodBye! ap1
 ** [out :: 192.168.0.23] GoodBye! ap2
    command finished

 

実行した結果、$HOSTNAMEが各ホスト名に変換されています。

これにより各サーバ上でコマンドが確認できました。

 

なお、使用可能なタスクは以下の通りです。

・run   コマンド実行
・sudo   root権限でコマンド実行 実行対象サーバでsudoの設定をする必要有
・pu   ファイル作成
・delete  ファイル削除
・render  Erbテンプレートをレンダリング。
・transaction 複数の処理をまとめてトランザクションとする
・on_rollback transactionのロールバックを行う

 

長くなってしまったのでRailsで使用する場合の説明は次回に。

 

コメント (0)  |トラックバック (0)

ブックマークに追加する Subscribe with livedoor Reader あとで読む

トラックバック URL

この記事にコメントする

ニックネーム:
メールアドレス:
URL:


KBMJのWebソリューション
Ruby on Rails Summer Festival 2008開催決定!!

TOPICS

2008/06/25
ZD Net Builder」の連載記事です。第四回は「Rubyでどう書く?:重複したRSSをまとめる」が掲載されました。

2008/05/30
ZD Net Builder」の連載記事です。第三回は「Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する」が掲載されました。

2008/05/07
ZD Net Builder」に連載を始めました。第二回は「Rubyでどう書く?:RubyでPDF履歴書を作成する」が掲載されました。

2008/04/24
アットマーク・アイティ」に『 Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する』が掲載されました。

全体のRoR最新ブログ一覧

プロフィール

  • TrinityT
  • 30 歳

ブログの購読

RSS

timelog
株式会社ケイビーエムジェイロゴ