Your SlideShare is downloading. ×
Capistrano in practice - WebCareer
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Capistrano in practice - WebCareer

3,357
views

Published on

talked about Capistrano in Rails Summer Festival 2008 by WebCareer

talked about Capistrano in Rails Summer Festival 2008 by WebCareer

Published in: Technology

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,357
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 現場で Capistrano を使ってデプロイする (株)永和システムマネジメント ¦¦ Rails勉強会@東京 諸橋 恭介 (もろはし きょうすけ) k-morohashi@esm.co.jp (work) moronatural@gmail.com (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 onRails
  • 15. Deployment onCapistrano
  • 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 deploySCM Password : dank...
  • 23. Capistranoのプロンプトは エコーバックされないのに • Capistranoが使っているメソッドを呼べばOKset :scm_password, Capistrano::CLI.password_prompt(“SCM Password : ”)$ cap deploySCM 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, trueset :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. ご清聴 ありがとうございました