railsプロジェクトをgit-pushしたときに自動的にデプロイする方法
gitはとてもスマートだから標準でいろいろなイベントをhookする機能を用意してくれているよ。
これを利用して、中央リポジトリにpushすると自動的にデプロイをするようにしたいと思う。
本番サーバは慎重にデプロイする必要があるけど、テストサーバはそのとき最新の作業分を常に確認したいからね。
環境
ローカルPC「Alice」
中央リポジトリ「Bob」
テストサーバ「Carol」
やりたいこと
AliceからBobへpushすると自動的にCarolがpullし、db:migrateを行う。場合によってはサーバのリスタートやfixtureの読み込み、その他諸々を行う。
code
hookするイベントは"post-receive"、pushされたら発生するイベントだよ。
まずはRAILS_ROOTに以下のファイルを作ろう。
deploy.rb
rake("db:migrate")
そして、Bobのhooksに"post-receive"ファイルを作ろう。中身は以下の通り
post-receiv
#!/bin/sh ( cd /path/to/Carol && \ git --git-dir=.git pull && \ rake rails:template LOCATION=deploy.rb )
こうしておけば、AliceからBobへpushしたときに自動的にCarolが更新されてmigrateが走るよ。
deploy.rbはrails-templateなので簡単にrailsに関する操作ができるのも便利。