1.これだけは入れとけ! 便利なgem

1.これだけは入れとけ!便利なgem
2.こう記述しろ!設定ファイル
3.意外と知らない?注意点
・capistrano_colors
・capistrano-ext
※インストール方法は割愛。
ググれ!
何ができる?
→capistranoの実行コマンド、
コメントなどを色づけしてくれる。
地味だけど便利。
使用前
使用後
何ができる?
→環境に応じたcapistrano
設定を差分ファイルで
上書きする事が可能になる。

フォルダ構成
Root
└ /config
└ deploy.rb (共通設定)
└/deploy
└staging.rb (staging差分)
└production.rb (production差分)
環境ごとの「user」を置き換えたいなら。。。
#config/deploy.rb
set :user,
“hogehoge“
#config/deploy/staging.rb
set :user,
“fugafuga“
#config/deploy/production.rb
set :user,
“piyopiyo“
ステージング環境へデプロイ
$ cap staging deploy
本番環境へデプロイ
$ cap production deploy
(1)
(2)
(3)
(4)
deploy.rb デフォルト記述
Passengerとの連携設定
パスワードなどの動的入力
プッシュ式デプロイ
Q. deploy.rbファイル書くの面倒だよ!
何かいい手ない?
A. APサーバで以下のデフォルトルールに従えば~
 Railsの実行ユーザは「app」
 アプリ設置場所は「/u/apps」
 「app」ユーザに「/u/apps」以下のファイル作
成・削除権限を与える
 サーバに公開鍵などでの
パスワード無しsshログイン可能
7行で済みます。
#config/deploy.rb
set :application,
“test “
set :scm,
“subversion“
set :scm_user,
“hogehoge“
set :scm_password, “fugafuga“
role :web, “web.test.com“
role :app, “app.test.com“
role :db, “db.test.com “
Q.CapistranoをPassengerと
連携させたいんだけど、
何か記述しておいた方が良い?
A.Passengerは「tmp/restart.txt 」
にファイルがあると、自動的に
そのアプリのみ再読み込みするので~
以下のように再起動タスクを記述しておくと便利。
#config/deploy.rb
namespace :deploy do
task :restart, :roles => :app do
run "touch #{current_release}/tmp/restart.txt”
end
# 以下タスクはApache自体の起動/停止に使用。複数アプリを
# 単一Apacheで公開している場合は使用しない方が良い
task :start, :roles => :app do
run "sudo /etc/rc.d/init.d httpd start "
end
task :stop, :roles => :app do
run "sudo /etc/rc.d/init.d httpd stop "
end
end
Q.capistranoでセキュリティ要件が厳しいとき、
以下のような要望が出てくる。
さあどうしよう?
セキュリティ要件でパスワードを設定ファイル
上にベタ書きするのはNG
 Subversionサーバのパスワードをデプロイ担
当者ごとに使い分けたい
 APサーバのパスワードをデプロイ担当者ごとに
使い分けたい
...etc

A.Capistrano::CLIを使用すれば
動的入力できる!
#config/deploy.rb
# 入力(エコーバックあり)
set :scm_user do
Capistrano::CLI.ui.ask (“scm user:”)
end
# パスワード (エコーバックなし)
set :scm_password do
Capistrano::CLI.password_prompt(“scm pass:”)
end
Q.セキュリティ上APサーバからSubversionリポジトリに
アクセス出来ないんだって!
これではデプロイできない。。。助けて!
APサーバ
Subversionサーバ
Capistrano実行サーバ
A. 「deploy_via, :copy」オプションを
使うことで、プッシュ式デプロイを行い
ましょう。
#config/deploy.rb
set :deploy_via, :copy
deploy_via :copyを設定すると
1. capistrano実行サーバにチェックアウト
2. APサーバにgzip圧縮してscpアップロード
3. APサーバ上で展開して配置
という流れでデプロイを行う事ができます。
APサーバ
③
②
①
Capistrano実行サーバ
Subversionサーバ
・role:dbの意味
・ユーザのアップロード画像などは
どこに置くべき?
Q. role :dbに指定するサーバは、
DBサーバで良いんだよね?
A. いいえ。
×:DBサーバ
○:Migrationを実行するサーバ
(ほとんどの場合APサーバと同じで良い)
Q. ユーザがアップロードした画像とか
docファイルとかって、
どこに配置しておくのが良いのかな?
A.shared/system以下にに置き、capistranoで
public以下へシンボリックリンクを
張りましょう。
myapp
シンボリックリンク
└ current
└ releases---20091122010101(最新アプリ)
└ shared シンボリックリンク └log
└ log
└public
シンボリックリンク
└ system
└ user_img
└ user_img
シンボリックリンクを張る例:
#config/deploy.rb
after “deploy”, “deploy:link_images”
namespace(:deploy) do
task :link_images do
run <<-CMD
cd #{release_path} &&
ln –nfs #{shared_path}/user_images
#{release_path}/public/user_images
CMD
end
end
ご静聴
ありがとう
ございました。