More than 1 year has passed since last update.

Capistranoは、複数のリモートマシンでスクリプトを実行する、デプロイツール(管理ツールとしても使えるかも?)
Chefをちょっと勉強したので次はこっちかな、という程度の不純さで試してます。
まぁ、今の仕事で全く使わないであろうツールの1つですね。

結構いろんなサイトを参考にしました(途中で参照にいれてないやつ)
http://tech.aainc.co.jp/archives/3773
http://yakinikunotare.boo.jp/orebase2/capistrano
https://github.com/capistrano/capistrano

必要条件

  1. スクリプトの送信元にRuby、Capistranoのインストールが必要。
  2. 送信元からリモートマシンにSSHで接続できること。複数のリモートマシンがある場合、すべてのマシンに同じユーザ/パスワードで接続できる必要がある。

簡単に書くと下記のような感じ。
送信元(ruby、capistrano) → リモートマシン達 (sshd ※)
※同じユーザ/パスワード

コマンド

基本的なコマンド

今のところ、使っているコマンドは下記の2つ

  • capify . ひな形の作成。下記のファイルが作成される
 l Capfile
 L config
  + deploy.rb

Capfileを読めばわかると思うが、中でload config/deployが呼ばれている。
なので、別のrbファイルをconfigに記述して読み込んでも良いみたい。
設定ごとにrbファイル作っていいかもね。って下記サイトに書いてある。
http://shibayu36.hatenablog.com/entry/2013/02/15/113811

  • cap タスクの実行
     ひな形の状態ならdeploy.rbが実行される。

deploy.rbの記述方法

下記のように記述していくようだ。

deploy.rb
set :user, "rasenn"
set :password, "password"
set :use_sudo, true

role :web, "192.168.1.2" , "192.168.1.3"
role :db, "192.168.1.4"
role :db, "192.168.1.5" , :primary => true 

task :task_name, :roles => [:web], :only => {:ruby => true} do 
  run "#{sudo} command_with_sudo"
  run "command 1"
  run "command 2"
  upload("upload_file", "upload_path", :via => :sftp, :recursive => true)
end

実行方法

下記のコマンドで実行。引数はdeploy.rbtaskの第一引数。

cap  task_name

deploy.rbの説明

setで変数(環境変数も?)をセットして、

roleでデプロイするサーバーをセットして、

実行するtaskを記述する。

setは第一引数(シンボル)が変数名、第二引数が値。
roleは第一引数がマシンの役割、第二引数がサーバのアドレス。
taskは第一引数はタスク名、:rolesはタスクを実行するマシンの役割、:onlyは実行条件。タスク名以外は省略可能。

runはコマンドを文字列で渡せばいいらしい。
下記サイトをみてみると、メソッドの実行結果でコマンド文字列を返すようにすることもできるみたい。便利そう。
http://tk0miya.hatenablog.com/entry/2013/02/19/131453

uploadはファイルをアップロードする設定、第一引数がローカルのアップロードファイル、第二引数がリモートのアップロードパス、:viaはアップロード方法(:scp:sftpがあるらしい)、recursiveは第一引数のディレクトリ以下のすべてのファイルを転送先フォルダに転送する。

task内にroleとかを入れることもOKみたい。
下記のサイトでは引数によって(testとproduction)でデプロイ先を変える、ということが例として上がっていた。便利。
http://shibayu36.hatenablog.com/entry/2013/02/15/113811

他にもtaskの順序がいろいろあるらしくて、下記の場合、他のタスクの前に実行される、とか出来るみたい。

task :default do  ~~ end

下記サイト参照
http://kenkennote.com/blog/2012/06/06/deploy-with-capistrano/

capistranoで設定できる設定値も上記のサイトに記述されています。

これを使うような仕事をしたいなー
とりあえず、今のところこんなところです。
もうちょっと調べたら追記します。

ハマったところ

sudo

sudo を使う場合、下記の設定を記述しなければならなかった。
参考サイト

default_run_options[:pty]=true

upload

アップロードで、SSHをパスワードなしでログインできるように、~/.ssh/id_rsa.pubをアップロードしようとしたら失敗した。
普通にSFTPでcd ~をしようとすると失敗するし、そりゃそうですよね。って感じ。
エラーもinitialize': expected a file to upload (ArgumentError)ですし・・・

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.