Debian Sarge で Capistrano 1.4.0 を動かす
2007-02-19
Debian Sarge で Capistrano が動かないという昨日の話の続き。
- Debian を sid (unstable) にする
- Debian をやめて Ubuntu にする
- いっそ Mac OS X にする
とか色々考えた挙句、結局Re: Capistrano and Media Temple (gs) - Grid Serverに書かれている方法で Capistrano のソースを修正して対応した。
$ cd /usr/lib/ruby/gems/1.8/gems/capistrano-1.4.0/lib/capistrano/scm
$ diff -u subversion.rb.org subversion.rb
--- subversion.rb.org 2007-02-20 00:27:50.445393872 +0900
+++ subversion.rb 2007-02-20 00:29:00.804370024 +0900
@@ -20,7 +20,7 @@
def latest_revision
@latest_revision ||= begin
configuration.logger.debug "querying latest revision..."
- match = svn_log(configuration.repository).scan(/r(\d+)/).first or
+ match = svn_info(".").scan(/Revision: (\d+)/).first or
raise "Could not determine latest revision"
match.first
end
@@ -87,6 +87,10 @@
`svn log #{authorization} -q --limit 1 #{path}`
end
+ def svn_info(path)
+ `svn info #{path}`
+ end
+
def svn_password
configuration[:svn_password] || configuration[:password]
end
svn log —limit 1 の代わりに svn info を使ってリビジョン番号を取得している。 なるほど。
これでもう一度、 deploy に挑戦。
$ cap deploy
* executing task deploy
* executing task update
** transaction: start
* executing task update_code
* querying latest revision...
* executing "if [[ ! -d /home/machu/deploy/releases/20070219153034 ]]; then\n svn co -q -r85 ssh+svn://example.com/svn/test_capistrano /home/machu/deploy/releases/20070219153034 &&\n (test -e /home/machu/deploy/revisions.log || (touch /home/machu/deploy/revisions.log && chmod 666 /home/machu/deploy/revisions.log)) && echo `date +\"%Y-%m-%d %H:%M:%S\"` $USER 85 20070219153034 >> /home/machu/deploy/revisions.log;\n fi"
servers: ["localhost"]
[localhost] executing command
command finished
(中略)
** transaction: commit
* executing task restart
* executing "sudo /home/machu/deploy/current/script/process/reaper"
servers: ["localhost"]
[localhost] executing command
** [out :: localhost] Couldn't find any pid file in '/home/machu/deploy/current/tmp/pids' matching 'dispatch.[0-9]*.pid'
** [out :: localhost] (also looked for processes matching "/home/machu/deploy/current/public/dispatch.fcgi")
command finished
今度は成功したっぽい。ただ、 deploy 先でサーバが動いていなかったので、サーバの再起動には失敗してる。 まぁ、これは今回はいい。
次に、 deploy 先を見てみる。
$ ls -l ~/deploy
total 12
lrwxrwxrwx 1 machu machu 42 Feb 20 00:30 current -> /home/machu/deploy/releases/20070219153034/
drwxrwxr-x 3 machu machu 4096 Feb 20 00:30 releases/
-rw-rw-rw- 1 machu machu 44 Feb 20 00:30 revisions.log
drwxrwxr-x 5 machu machu 4096 Feb 18 16:18 shared/
current という symlink が、 releases に格納された最新のバージョンを指すようになっている。 バージョンアップしても、最新版は常に current に入っている。
TextDrive の場合、これまでは
~/web/public/
に配置していたコンテンツが、
~/web/public/current/
になっちゃう訳か。 眠くなってきたので、今日はここまで。