Capstranoに挑戦する(2)

続き

Capistranoをインストール
$ sudo gem install capistrano

チェックアウトしたRailsアプリのフォルダで

$ capify .

すると、なんかファイルが作られる
config/deploy.rb を編集すればいいらしい

# リポジトリの場所
set :repository,  "file:///home/{user_name}/svn/rails1/trunk"
# デプロイ先
set :deploy_to, "/home/{user_name}/deploy/test1"
# (たぶん)SSHログイン時のユーザ名
set :user, "{user_name}"
# root権限で実行するか(trueにする意味がよくわからないが、
# デフォルトはtrueっぽい)
set :use_sudo, false
# よくわかってない。passengerの再起動はtask :restartでrestart.txtを置くことで行われるみたい
namespace :deploy do
  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

/etc/apache2/sites-enabled/000-defaultを編集


	DocumentRoot /home/{user_name}/deploy/test1/current/public

初回のみ。deploy先に必要なフォルダを作成している。このデプロイ先のなかでさらに世代管理してくれるらしい
[set :use_sudo, false]しとかないと、作られるフォルダはroot所有となる

$ cap deploy:setup

リポジトリから最新の環境を取得し、さらにproductionモードでマイグレーションまでしてくれる(この作業は:userが行うので、deploy:setupで作ったフォルダがrootさんのものだと、Permission deniedとか言われる。ハマった

$ cap deploy:cold

サーバが起動されるはずですが、なにも設定していないので当然ながら動かず。
手動でApacheを起動する

$ cap deploy:start
$ sudo /etc/init.d/apache2 start

次に、ちょっとだけtrunkの中身を変更、コミットした上で稼働中のサーバにデプロイしてみる
コミットまでは省略

$ cap deploy

再起動までやってくれるみたい。ただ、マイグレーションは行ってくれない(当たり前か)
リポジトリにデータベースファイル(sqlite3使ってるので)も含まれてるので、deployしたところで古いのが消えてしまったようです
-> マイグレーションまでする場合は[cap deploy:cold]、ソースのとっかえだけなら[cap deploy]と覚えるといいそうな