Capistranoをwindows環境に入れ、linux機でrailsを公開する

p9*目的

 railsの開発時の負荷やミスを減らしたい。
 これまではwinSCPでアップロードしていたため、ミスやバージョン違いが発生する可能性が高かった。
 svnソースコードを管理し、そのまま公開できるようにしたい


これまでのワークフロー
1 開発機でrailsを開発する(ソースコードは開発機のなか)
2 公開機にwinSCPで開発したソースコードをコピーする
3 sshで公開機にログインし、再起動などの操作を行う

目指すワークフロー
1 svnサーバーからソースコードを開発機にチェックアウト(ダウンロード)する
2 開発機でrailsを開発する
3 ソースコードsvnサーバーにコミット(アップロード)する
4 Capistranoを開発機で実行し、svnサーバーから公開機にソースコードをコピーする
5 公開機からCapistrano経由で開発機を操作する


 これによりソースコードが安全に管理され、公開機が複数台になったときも運用が可能になる

p10*構成

 開発は普段利用しているwindowsで行う。
 svnサーバーと公開サーバーは同一とする。(本来は別が望ましい)


インターネット
 └ルーター
  ├windows(開発用)
   └mysql,subversion,rails,tortoiseSVN
  └linux(公開用 fedora8)
   └apache,mysql,subversion,rails

p11*インストール

Capistrano 2.2.0のチュートリアル - unnecessary words
http://d.hatena.ne.jp/hayori/20080416/1208348879


複数svnリポジトリのつくり方 - unnecessary words
http://d.hatena.ne.jp/hayori/20071028/1193539671


○deploy.rb

require 'mongrel_cluster/recipes'

set :application, "test" # アプリ名
set :repository, "http://192.168.11.9/repos/svn/"
set :deploy_to, "/home/(公開場所)"
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"
set :user, "(ユーザー)"

set :use_sudo, false
role :app, "192.168.11.9"
role :web, "192.168.11.9"
role :db, "192.168.11.9", :primary => true

このようにsvn,app,web,dbが全て同一サーバーでも動作する。

○/etc/httpd/conf.d/subversion.conf


DAV svn
SVNParentPath /home/svn

Order allow,deny
Allow from all

p12*ハマったポイント

・どこに何をインストールしたらいいのかわからない
 開発マシン:rails,ruby,capistrano,svn
 公開マシン:apache,rails,ruby,db,mongrel,mongrel_clusterなど(今回svnサーバを兼ねるのでsubversionも)


・公開鍵の認証が行えない
 公開用マシンに公開鍵が設定してあるとcapistranosshログイン出来なくなってしまう。
 Putty Agentをインストールし、公開鍵を設定することで解決できる。


・サブバージョンを設定したが、web_devで公開設定にしていない
 svnサーバーはweb_dev公開設定をすること
 今回の場合http://192.168.11.9/repos/svn/にアクセスしてsvnが見えることが必要


・web_debで公開がうまくいかない
/home/svn/appにアプリケーションのリポジトリがつくってあったとする
 /etc/httpd/conf.d/subversion.conf の設定で
SVNParentPath /home/svn/app
 としてしまうと公開できない。
SVNParentPath /home/svn
 のように、リポジトリの一つ上を指定する。


・deploy.rbのrepositoryを自ドメイン(開発機)にしていた
 dnsサーバーを内部で特別な運用をしていないかぎり、ローカルなIP(192.168.ほにゃらら)にしなくてはならない。

 
・開発機(windows)にSubversionがインストールされていない
 クライアントのtortoiseSVNが入っているが、svnが入っていないことがある。
 そのためcapistranosvnサーバから落とすことができなくなってしまう。
 

railsのDBの設定が間違っている
 開発機と公開鍵でDBを分けている場合に注意する。

p13*フィーチャーワーク

svnサーバーにアクセス制限をかける
Capistrano経由で公開サーバーを操作する
svnサーバーと公開サーバーを分ける

p14*感想

・設定作業には3日ほどかかってしまった。
 エラーメッセージが出るたびにgoogleで検索したところ、同じ症状にはまっているひとを見つけ、参考にさせていただいた。

capistranoの設定は様々なアプリケーションが絡むためインストールが自分では不可能かと感じていた。
 しかし挑戦してみたところ豊富な資料があり、なんとか対応することができた。

・それにしてもCapistranoという名前が読みにくいぜ! きゃぴすとらーの!

p15*参考文献

以下のサイトのお世話になりました。


Ruby on Rails プラグイン まとめ wiki - Capistrano
http://www13.atwiki.jp/maimuzo/pages/26.html


第6回 deploy:update - Capistrano 入門 - Ruby on Rails with OIAX
http://www.oiax.jp/rails/capistrano/deploy_update.html

Debian Sarge で Capistrano 1.4.0 を動かす - まちゅダイアリー (2007-02-19)
http://www.machu.jp/diary/20070219.html#p01


つくるぶガイドブログ: capistrano で本番環境にデプロイ
http://www.tkrb.jp/guide/2008/02/capistrano_rails.html


Amazon.co.jpRailsによるアジャイルWebアプリケーション開発: 前田 修吾: 本
http://www.amazon.co.jp/dp/4274066401