前回の記事がわかりやすく解説してくれーとのりさんからリクエストがあったので詳解してみるテスト。
今回設計した方法では以下のようなファイルの配置になります。また、全てapacheの権限であるというのがポイントになっています。
- /svn(subversionのレポジトリ配下)
- /hoge(rNoteのレポジトリ)
- /hooks/post-inst(コミット時に実行するスクリプト)
- /hoge(rNoteのレポジトリ)
- /www(webのroot)
- /hoge(rNoteのroot)
まず、apacheの権限でsubversionのレポジトリを/svn/hogeへ作成します。
$ svnadmin create /svn/hoge
これでmod_svnを入れてapacheをセッティングしておけば、 http://example.com/hoge という感じのURIでレポジトリへの操作が可能になります。
次にレポジトリにrNote全体をimportします。これでどこからでもrNote全体をひっぱってくる事が可能になります。
$ cd /tmp/note(rNoteのディレクトリ)
$ svn import . http://example.com/hoge
そして、apacheの権限下のディレクトリへ移動して、先程作ったレポジトリの内容をチェックアウトします。ただし、apache側でsubversionにパスフレーズとかを入れてしまうと面倒なので、直接ディレクトリを指定してチェックアウトをするのがポイントです。なお、最初にapache権限でsubversionのレポジトリを作ったのも、ディレクトリを指定してチェックアウトをするようにしたためです。
$ cd /www
$ svn checkout /svn/hoge
これで/www/hogeというディレクトリができ、apacheの設定でそこをrNoteのrootとして見せるようにすればいちおう閲覧は可能になります。また、この段階でも手動で update を実行すれば subversion のレポジトリから最新の記事をもってきて表示をする事ができます。記事を書いてレポジトリへコミットした後に、サーバにログインして以下のようなコマンドを実行します。
$ cd /www/hoge
$ svn update
svn update コマンドでは.svnディレクトリを見て自動的に元のレポジトリ(今回では/svn/hoge)を判断してレポジトリと同期を取ってくれます。しかし、いちいちサーバに入るのは面倒なので、この手順を自動化してしまいます。まず、上記のコマンドを代わりに実行してくれるスクリプトを記述します。
#!/bin/sh
cd /www/hoge
svn update
これを update.sh とかいう名前で保存をして、apacheの権限で実行してみましょう。無事にコミットした記事が反映されたら、このスクリプトをコミット時に実行するようにします。具体的には、/svn/hoge/hooks/post-commit を以下の内容にします。
#!/bin/sh
/www/update.sh
hooks/post-commit はコミットが完了した時に必ず実行されるファイルです。もちろん、apacheの権限で実行できるようになっている必要があります。
$ cd /www
$ chmod +x update.sh
$ cd /svn/hoge/hooks
$ chmod +x post-commit
以上で設定は完了です。これでコミットと共に記事が反映されるようになります。この記事も上記の仕組みを使っているので、見えるはずです>誰に言ってるんだ(汗