at posts/single.html

やっぱり動かない

こんなことやってみたけど、デプロイ先に反映されない。

Subversion リポジトリを作って、 Rails アプリを作成。

$ svnadmin create /home/machu/svn/capping --fs-type=fsfs
$ cd ~/work
$ svn co svn+ssh://localhost/home/machu/svn/capping
$ rails -d sqlite3 capping
$ cap --apply-to capping
$ svn add capping/*
$ svn commit -m 'initial setup' capping

config/deploy.rb を修正。

set :application, "capping"
set :repository, "svn+ssh://localhost/home/machu/svn/#{application}"
role :web, "localhost"
role :app, "localhost"
role :db,  "localhost", :primary => true
set :deploy_to, "/home/machu/deploy/#{application}"

deploy 先をセットアップ。

$ cap setup

次に deploy 。ここで失敗する。

$ cap deploy
  * executing task deploy
  * executing task update
 ** transaction: start
  * executing task update_code
  * querying latest revision...
  (中略)
 ** [out :: localhost] ln:
 ** [out :: localhost] `/home/matsuoka/deploy/capping/shared/system' へのシンボリックリンク `/home/matsuoka/deploy/capping/releases/20070220055523/public/system' を作成します
 ** [out :: localhost] : そのようなファイルやディレクトリはありません
    command finished
*** [set_permissions] transaction: rollback

理由は capistrano が最新のリビジョン番号を認識できていないから。

$ svn info . | grep Revision
Revision: 0

$ svn info config | grep Revision
Revision: 1

最初にチェックアウトした時点でリビジョン0。 rails コマンドでひな形を作ってリビジョン1。 カレントディレクトリはリビジョン0で、それ以外のディレクトリはリビジョン1という扱いになってる。

だから、こうすると(今回は) deploy できる。

$ cd config
$ cap -f deploy.rb deploy

でも、 script/generate でモデルを作ってリビジョンが2になったら、 cap deploy で反映されなくなる。 (configディレクトリのリビジョンが1のままだから)

これは Subversion が古い (1.1.4) から?よく分からない。 しかも、最新の Subversion をソースから入れようとしたら、 apr のバージョンが古いと怒られた。 本当に OS の乗り換えを検討するかな…。

関連する日記