Capistrano in practice - WebCareer

3,854 views
3,669 views

Published on

talked about Capistrano in Rails Summer Festival 2008 by WebCareer

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,854
On SlideShare
0
From Embeds
0
Number of Embeds
47
Actions
Shares
0
Downloads
23
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Capistrano in practice - WebCareer

  1. 1. 現場で Capistrano を使ってデプロイする (株)永和システムマネジメント ¦¦ Rails勉強会@東京 諸橋 恭介 (もろはし きょうすけ) k-morohashi@esm.co.jp (work) moronatural@gmail.com (private)
  2. 2. まとめ•Railsアプリのデプロイには Capistranoが便利•設定をしたり、環境を作ったりす るだけの価値がある•制約も多いが乗り越える方法もい ろいろ用意されている
  3. 3. Capistranoってなに?•Rubyで書かれたデプロイツール•Railsのデプロイにも最適
  4. 4. アジャイルなプロジェクトでは デプロイを重視する•顧客/マネージャへの進捗報告 としてのデモ• 頻繁なデモでフィードバックを得る• 本リリース直前の環境リスクを 低減
  5. 5. デプロイに必要なこと•サービスの一時停止•アプリケーションの入換 •古いバージョンの退避•DBスキーマの更新•サービスの再起動 などなど
  6. 6. よくあるデプロイ手順書• コマンドXXXでアプリケーションを停止する。• 古いバージョンを_(日付YYYYMMDD)にリネームする。• DBチームからの作業指示書に従い、mysqlコマンドを実行し DB上で作業する。• レポジトリから最新のソースコードを取得し、圧縮する。• FTPで圧縮したソースコードを転送、展開する。• コマンドXXXで起動する。
  7. 7. デプロイは難しい•いつの間にか手順書が古くなる•手作業のオペレーションミス• 担当者のスキルに依存 デプロイの頻度が下がる
  8. 8. 手作業の デプロイは難しい•いつの間にか手順書が古くなる•手作業のオペレーションミス• 担当者のスキルに依存 デプロイの頻度が下がる
  9. 9. Capistranoを使うと•デプロイを • 自動化して • 速くかつ簡単に• できるようになります。
  10. 10. デプロイの自動化•誰でもデプロイできる• 煩雑な手順もミスなく•手動作業にはオペレーションミス がつきもの
  11. 11. 設定ファイルこそが 動く手順書•記述性の高いRubyを使った動作する手順書• Capistrano設定ファイル という オープンなフォーマットの手順書
  12. 12. 効能•自動化によって速く簡単になれば 繰り返しデプロイできる cap前 cap後業務システム A 1時間 10分業務システム B 半日 5分(開発中・テスト環境) 1時間B2Cサービス(稼働中) 1日 (確認込み)
  13. 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. 14. Ruby onRails
  15. 15. Deployment onCapistrano
  16. 16. Capistranoの レールに乗るために • アプリケーションは /u/apps に配置すること • 作業ユーザとして"app"というユーザがいること • 各サーバにsshでログインできること • 各サーバからレポジトリにアクセスできること • sshでログインしたユーザがサーバ上のファイルの作成/削除できること • などなどほとんどは設定で変えられるが、実プロジェクトに適用するのは難しいことも
  17. 17. Capistranoの基本的な設定 Recipe 177 (p.515) Capistranoを設定する Recipe 178 (p.519) Capistranoでデプロイ するhttp://amazon.jp/gp/product/4797336625
  18. 18. 今日の話 現場でCapistranoを使う ノウハウを紹介します• どんなプロジェクトでもCapistranoを使える ようになるわけではありません。• もともとCapistranoのレールに乗って環境を 作ることをお進めします
  19. 19. お品書き•設定ファイルからパスワードを 追い出す• 対話実行環境の作り方• 対話実行を遅延させる•Capistranoの歩き方を知る
  20. 20. 設定ファイルからパスワードを追い出す
  21. 21. config/deploy.rbにあ り が ち な こ と• Subversionのパスワードを設定したい • scm_password 変数で設定できる • でもconfig/deploy.rbに書かなきゃいけない• 設定を「対話的に」設定したい  • などなど
  22. 22. config/deploy.rbは Rubyスクリプト • そこで $stdin.gets ですよ!!print “SCM Password : ”set :scm_password, $stdin.gets.strip$ cap deploySCM Password : dank...
  23. 23. Capistranoのプロンプトは エコーバックされないのに • Capistranoが使っているメソッドを呼べばOKset :scm_password, Capistrano::CLI.password_prompt(“SCM Password : ”)$ cap deploySCM Password : (エコーバックされない)
  24. 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. 25. 対話実行を遅延させるconfig/deploy.rbは読み込み時に実行される$ cap -T # タスク一覧を表示SCM Password : (デプロイは実行しないのに聞かれる) • その変数が必要なときでなく、ファイルが読み込 まれたときに実行されてしまう • 正直うざったい。。。
  26. 26. setにブロックを 渡しましょうset :scm_password do Capistrano::CLI.password_prompt(“SCM Password : ”)end • 設定が初めて参照された時にブロックを評価 • ブロックの返り値を設定として利用 • 2回目以降の呼び出しは、戻り値が利用される
  27. 27. おまけ•デプロイ先ではパスワード付きのコ マンドラインが実行されます。 $ svn --username moro --password foo co http://svn.example.com/svn/myapp• これを防ぐには scm_prefer_prompt 変数を設 定します
  28. 28. 実際の例set :scm_prefer_prompt, trueset :scm_password do Capistrano::CLI.password_prompt(“SCM Password : ”)end • Subversionのパスワードをconfig/deploy.rb から追い出すことができます • コマンドライン履歴などにも残りません • パスワードが必要になったときに、初めて入力待 ちになります
  29. 29. Capistranoの 歩き方を知る
  30. 30. Googleにない•Capistranoは便利ですが、検索 しても情報が少ない 2件
  31. 31. ソースがドキュメント です
  32. 32. ドキュメントの調べ方 • 21世紀ですがgrepがいいです。 • set や _cset で変数を設定している箇所 • variable や fetch での設定を読んでいる箇所$ find capistrano-2.4.3/lib/ -name *.rb | xargs grep -w variable
  33. 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. 34. デプロイではどんな コマンドが実行されるの?$ cap -dv deploy• capコマンドを -d (--debug) と -v(--verbose) オプション付きで実行• 詳細な実行ログ• コマンド実行前に確認
  35. 35. まとめ•Railsアプリのデプロイには Capistranoが便利•設定をしたり、環境を作ったりす るだけの価値がある•制約も多いが乗り越える方法もい ろいろ用意されている
  36. 36. アジャイルなプロジェクトでは デプロイを重視する 15 (p.64) 早いうちにデプロイを自 動化する 16 (p.64) 頻繁なデモでフィード バックを得るhttp://amazon.jp/gp/product/4274066940
  37. 37. Capistranoの基本的な設定 Recipe 177 (p.515) Capistranoを設定する Recipe 178 (p.519) Capistranoでデプロイ するhttp://amazon.jp/gp/product/4797336625
  38. 38. ご清聴 ありがとうございました

×