Más contenido relacionado La actualidad más candente (20) Similar a Capistrano in practice - WebCareer (20) Más de Kyosuke MOROHASHI (8) Capistrano in practice - WebCareer1. 現場で
Capistrano を
使ってデプロイする
(株)永和システムマネジメント ¦¦ Rails勉強会@東京
諸橋 恭介 (もろはし きょうすけ)
k-morohashi@esm.co.jp (work)
moronatural@gmail.com (private)
6. よくあるデプロイ手順書
• コマンドXXXでアプリケーションを停止する。
• 古いバージョンを_(日付YYYYMMDD)にリネームする。
• DBチームからの作業指示書に従い、mysqlコマンドを実行し
DB上で作業する。
• レポジトリから最新のソースコードを取得し、圧縮する。
• FTPで圧縮したソースコードを転送、展開する。
• コマンドXXXで起動する。
11. 設定ファイルこそが
動く手順書
•
記述性の高いRubyを使った
動作する手順書
• Capistrano設定ファイル という
オープンなフォーマットの手順書
13. 設定も簡単
•Capistranoは設定も簡単
• Railsと同じように 設定よりも規約
• レールに乗れば6行でデプロイできる
set :application, "myapp"
set :repository, "http://example.com/svn/myapp"
role :web, "web.example.com"
role :app, "app.example.com"
role :db, "db.example.com"
16. Capistranoの
レールに乗るために
• アプリケーションは /u/apps に配置すること
• 作業ユーザとして"app"というユーザがいること
• 各サーバにsshでログインできること
• 各サーバからレポジトリにアクセスできること
• sshでログインしたユーザがサーバ上のファイルの作成/削除できること
• などなど
ほとんどは設定で変えられるが、
実プロジェクトに適用するのは難しいことも
17. Capistranoの基本的な設定
Recipe 177 (p.515)
Capistranoを設定する
Recipe 178 (p.519)
Capistranoでデプロイ
する
http://amazon.jp/gp/product/4797336625
22. config/deploy.rbは
Rubyスクリプト
• そこで $stdin.gets ですよ!!
print “SCM Password : ”
set :scm_password, $stdin.gets.strip
$ cap deploy
SCM Password : dank...
23. Capistranoのプロンプトは
エコーバックされないのに
• Capistranoが使っているメソッドを呼べばOK
set :scm_password,
Capistrano::CLI.password_prompt(“SCM Password : ”)
$ cap deploy
SCM Password : (エコーバックされない)
26. setにブロックを
渡しましょう
set :scm_password do
Capistrano::CLI.password_prompt(“SCM Password : ”)
end
• 設定が初めて参照された時にブロックを評価
• ブロックの返り値を設定として利用
• 2回目以降の呼び出しは、戻り値が利用される
28. 実際の例
set :scm_prefer_prompt, true
set :scm_password do
Capistrano::CLI.password_prompt(“SCM Password : ”)
end
• Subversionのパスワードをconfig/deploy.rb
から追い出すことができます
• コマンドライン履歴などにも残りません
• パスワードが必要になったときに、初めて入力待
ちになります
32. ドキュメントの調べ方
• 21世紀ですがgrepがいいです。
• set や _cset で変数を設定している箇所
• variable や fetch での設定を読んでいる箇所
$ find capistrano-2.4.3/lib/ -name *.rb |
xargs grep -w variable
33. 標準のdeploy.rb
• capistrano-2.x.x/lib/capistrano/recipes/deploy.rb
• たくさんのデフォルト設定 (Ruby)
• 自然言語による説明 (英語)
• 実行されるコマンド (sh)
task :finalize_update, :except => { :no_release => true } do
run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
(略)
run <<-CMD
rm -rf #{latest_release}/log #{latest_release}/public/system
#{latest_release}/tmp/pids &&
mkdir -p #{latest_release}/public &&
mkdir -p #{latest_release}/tmp &&
...
34. デプロイではどんな
コマンドが実行されるの?
$ cap -dv deploy
• capコマンドを -d (--debug) と -v(--verbose)
オプション付きで実行
• 詳細な実行ログ
• コマンド実行前に確認
36. アジャイルなプロジェクトでは
デプロイを重視する
15 (p.64)
早いうちにデプロイを自
動化する
16 (p.64)
頻繁なデモでフィード
バックを得る
http://amazon.jp/gp/product/4274066940
37. Capistranoの基本的な設定
Recipe 177 (p.515)
Capistranoを設定する
Recipe 178 (p.519)
Capistranoでデプロイ
する
http://amazon.jp/gp/product/4797336625