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

More Related Content

Capistrano 実践Tips集