Submit Search
Capistrano in practice - WebCareer
•
8 likes
•
2,159 views
Kyosuke MOROHASHI
Follow
talked about Capistrano in Rails Summer Festival 2008 by WebCareer
Read less
Read more
1 of 38
Download now
Downloaded 27 times
More Related Content
Capistrano in practice - WebCareer
1.
現場で Capistrano を 使ってデプロイする
(株)永和システムマネジメント ¦¦ Rails勉強会@東京 諸橋 恭介 (もろはし きょうすけ)
[email protected]
(work)
[email protected]
(private)
2.
まとめ •Railsアプリのデプロイには Capistranoが便利 •設定をしたり、環境を作ったりす るだけの価値がある •制約も多いが乗り越える方法もい
ろいろ用意されている
3.
Capistranoってなに? • Rubyで書かれたデプロイ ツール •Railsのデプロイにも最適
4.
アジャイルなプロジェクトでは デプロイを重視する •顧客/マネージャへの進捗報告
としてのデモ • 頻繁なデモでフィードバックを得る • 本リリース直前の環境リスクを 低減
5.
デプロイに必要なこと •サービスの一時停止 •アプリケーションの入換 •古いバージョンの退避 •DBスキーマの更新 •サービスの再起動
などなど
6.
よくあるデプロイ手順書 •
コマンドXXXでアプリケーションを停止する。 • 古いバージョンを_(日付YYYYMMDD)にリネームする。 • DBチームからの作業指示書に従い、mysqlコマンドを実行し DB上で作業する。 • レポジトリから最新のソースコードを取得し、圧縮する。 • FTPで圧縮したソースコードを転送、展開する。 • コマンドXXXで起動する。
7.
デプロイは難しい •いつの間にか手順書が古くなる •手作業のオペレーションミス • 担当者のスキルに依存 デプロイの頻度が下がる
8.
手作業の デプロイは難しい •いつの間にか手順書が古くなる •手作業のオペレーションミス • 担当者のスキルに依存
デプロイの頻度が下がる
9.
Capistranoを使うと •デプロイを • 自動化して
• 速くかつ簡単に • できるようになります。
10.
デプロイの自動化 •誰でもデプロイできる • 煩雑な手順もミスなく •手動作業にはオペレーションミス がつきもの
11.
設定ファイルこそが
動く手順書 • 記述性の高いRubyを使った 動作する手順書 • Capistrano設定ファイル という オープンなフォーマットの手順書
12.
効能 •自動化によって速く簡単になれば 繰り返しデプロイできる
cap前 cap後 業務システム A 1時間 10分 業務システム B 半日 5分 (開発中・テスト環境) 1時間 B2Cサービス(稼働中) 1日 (確認込み)
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"
14.
Ruby on Rails
15.
Deployment
on Capistrano
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
18.
今日の話 現場でCapistranoを使う ノウハウを紹介します •
どんなプロジェクトでもCapistranoを使える ようになるわけではありません。 • もともとCapistranoのレールに乗って環境を 作ることをお進めします
19.
お品書き •設定ファイルからパスワードを 追い出す • 対話実行環境の作り方 •
対話実行を遅延させる •Capistranoの歩き方を知る
20.
設定ファイルから パスワードを追い出す
21.
config/deploy.rbに あ り が ち な こ と • Subversionのパスワードを設定したい •
scm_password 変数で設定できる • でもconfig/deploy.rbに書かなきゃいけない • 設定を「対話的に」設定したい • などなど
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 : (エコーバックされない)
24.
Capistrano::CLI # パスワードなど、エコーバックされないもの Capistrano::CLI.password_prompt(“SCM Password
: ”) # エコーバックしたい場合 Capistrano::CLI.ui.ask("hogehoge : ") # 1文字だけ入れたい場合 [y/n]など Capistrano::CLI.ui.ask("hogehoge : "){|q| q.character = true } 詳しくは Highline のドキュメント参照
25.
対話実行を遅延させる config/deploy.rbは読み込み時に実行される $ cap -T
# タスク一覧を表示 SCM Password : (デプロイは実行しないのに聞かれる) • その変数が必要なときでなく、ファイルが読み込 まれたときに実行されてしまう • 正直うざったい。。。
26.
setにブロックを
渡しましょう set :scm_password do Capistrano::CLI.password_prompt(“SCM Password : ”) end • 設定が初めて参照された時にブロックを評価 • ブロックの返り値を設定として利用 • 2回目以降の呼び出しは、戻り値が利用される
27.
おまけ •デプロイ先ではパスワード付きのコ マンドラインが実行されます。 $
svn --username moro --password foo co http://svn.example.com/svn/myapp • これを防ぐには scm_prefer_prompt 変数を設 定します
28.
実際の例 set :scm_prefer_prompt, true set
:scm_password do Capistrano::CLI.password_prompt(“SCM Password : ”) end • Subversionのパスワードをconfig/deploy.rb から追い出すことができます • コマンドライン履歴などにも残りません • パスワードが必要になったときに、初めて入力待 ちになります
29.
Capistranoの 歩き方を知る
30.
Googleにない •Capistranoは便利ですが、検索 しても情報が少ない
2件
31.
ソースが ドキュメント です
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) オプション付きで実行 • 詳細な実行ログ • コマンド実行前に確認
35.
まとめ •Railsアプリのデプロイには Capistranoが便利 •設定をしたり、環境を作ったりす るだけの価値がある •制約も多いが乗り越える方法もい
ろいろ用意されている
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
38.
ご清聴 ありがとう ございました
Download