Rails作業記録その3

なかなか本題に入らないわけですが、まだ入りません。あとで困らないようにsubversionリポジトリ管理しておくことにします。

リポジトリの作成

xxx:/home/www$ su svn
Password:
svn:/home/www$ cd
svn:~$ svnadmin create 2.5-55.jp
svn:~$ svn mkdir file:///home/svn/2.5-55.jp/trunk -m 'mkdir trunk'
svn:~$ svn mkdir file:///home/svn/2.5-55.jp/branches -m 'mkdir branches'
svn:~$ svn mkdir file:///home/svn/2.5-55.jp/tags -m 'mkdir tags'
svn:~$ exit

これで「file:///home/svn/2.5-55.jp/trunk」というリポジトリが作成されました。

wwwディレクトリの構成

「/home/www」以下のディレクトリ構成です。ドメインごとにここにディレクトリを掘っています。trunkリポジトリをここにチェックアウトするつもりです。

www
-- 2.5-55.jp
-- app
-- config
-- db
-- doc
-- lib
-- log
-- public
-- script
-- test
-- tmp
`-- vendor
`-- plugins
-- bin
`-- satake7.net |-- cgi-bin |-- config |-- log `-- public

rails-svnコマンド

いろいろとネットをググってみたところ「Railsアプリケーション作成時にレポジトリに一切合切入れてしまえ」という意見が多かったので、こちら(→http://wwwaku.com/blog_part2/2008/02/14/rails%e3%81%a8subversion%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9/)のrails-svnコマンドを導入することにしました。(手作業で1行ずつ実行してちゃんと動くことは確認済みです。"-d database"でDBを指定するところだけ少し変更しました)

#!/bin/bash

if [ "$#" != "3" -a "$#" != "4" ]; then
  echo "Usage: rails-svn app_dir repository username [database]"
  exit 1
fi

if [ "$#" -eq "4" ]; then
  if [ $4 != "mysql" -a $4 != "oracle" -a $4 != "postgresql" -a $4 != "sqlite2" -a $4 != "sqlite3" ]; then
    echo "Usage: rails-svn app_dir repository username [mysql/oracle/postgresql/sqlite2/sqlite3]"
    exit 1
  fi
  DB_OPTION='-d '$4
else
  DB_OPTION=
fi

APPDIR=./$1
SVN_TRUNK=$2
SVN_USER=$3

function check_if_exist () {
  if  -e $1 ; then
    echo "rails $APPDIR $DB_OPTION"
    echo "$1 already exists, overwrite? y or n"
    echo ""
    read OVERWRITE
    case "$OVERWRITE" in
    y)
      echo "Overwriting..."
      ;;
    *)
      echo "Action canceled"
      exit 1
      ;;
    esac
  fi
}

check_if_exist ${APPDIR}
rails $APPDIR $DB_OPTION
svn import $APPDIR $SVN_TRUNK -m "Import" --username $SVN_USER
sudo rm -r $APPDIR
svn checkout $SVN_TRUNK $APPDIR
cd $APPDIR

svn remove log/*
svn commit -m "removing log files"
svn propset svn:ignore "*.log" log/
svn update log/
svn commit -m "Ignoring all files in /log/ ending in .log"
svn move config/database.yml config/database.example
svn commit -m "Moving database.yml to database.example to provide a template for anyone who checks out the code"
svn propset svn:ignore "database.yml" config/
svn update config/
svn commit -m "Ignoring database.yml"
svn remove tmp/*
svn propset svn:ignore "*" tmp/
svn update tmp/
svn commit -m "ignore tmp/ content from now"
svn propset svn:ignore ".htaccess" public/
svn update public/
svn commit -m "Ignoring .htaccess"
svn propset svn:ignore "dispatch.fcgi" public/
svn update public/
svn commit -m "Ignoring dispatch.fcgi"
http://wwwaku.com/blog_part2/2008/02/14/rails%e3%81%a8subversion%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9/

rails-svnの使い方

作成した「rails-svn」は「/usr/bin」へ移動させて、755属性(誰でも実行可)にしておきます。

xxx:~$ sudo mv rails-svn /usr/bin/
xxx:~$ s chmod 755 /usr/bin/rails-svn
xxx:~$ rails-svn
Usage: rails-svn app_dir repository username
exit 1

rails-svn」コマンドは、これからRailsアプリケーションを作成しようとするディレクトリ(ここでは「/home/www」)に移動してから使います。

xxx:~$ cd /home/www
xxx:/home/www$ rails-svn 2.5-55.jp file:///home/svn/2.5-55.jp/trunk svn

./2.5-55.jp already exists, overwrite? y or n

n
Action canceled
exit 1

「./2.5-55.jp」がすでにあるから上書きするかどうか聞いてきてます。もう一度やるのは嫌なのでNoにしましたが、Yesにすれば、ちゃんと動きます。

手作業での記録

xxx:/home/www$ APPDIR=./2.5-55.jp ← アプリディレクトリをセット
xxx:/home/www$ echo $APPDIR
./2.5-55.jp
xxx:/home/www$ SVN_TRUNK=file:///home/svn/2.5-55.jp/trunk ← リポジトリをセット
xxx:/home/www$ echo $SVN_TRUNK
file:///home/svn/2.5-55.jp/trunk
xxx:/home/www$ SVN_USER=svn ← svnユーザをセット
xxx:/home/www$ echo SVN_USER
SVN_USER
xxx:/home/www$ rails $APPDIR ← Railsアプリの作成
      create
      create  app/controllers
      create  app/helpers
      create  app/models
        :         :
        :         :
      create  log/development.log
      create  log/test.log
xxx:/home/www$ svn import $APPDIR $SVN_TRUNK -m "Import" --username $SVN_USER ← できあがったRailsアプリをリポジトリにインポートします
Adding         2.5-55.jp/test
Adding         2.5-55.jp/test/unit
Adding         2.5-55.jp/test/test_helper.rb
  :                  :
Adding         2.5-55.jp/public/stylesheets
Adding         2.5-55.jp/public/favicon.ico

Committed revision 4.
xxx:/home/www$ s rm -r $APPDIR ← 元のディレクトリはもういらないので削除
[sudo] password for xxx:
xxx:/home/www$ svn checkout $SVN_TRUNK $APPDIR ← その代わりチェックアウトでディレクトリを作成します
A    2.5-55.jp/test
A    2.5-55.jp/test/unit
A    2.5-55.jp/test/test_helper.rb
A 2.5-55.jp/public/stylesheets A 2.5-55.jp/public/favicon.ico Checked out revision 4. xxx:/home/www$ cd $APPDIR ← Railsアプリディレクトリへ移動 xxx:/home/www/2.5-55.jp$ svn remove log/* ← logはリポジトリから削除します D log/development.log D log/production.log D log/server.log D log/test.log xxx:/home/www/2.5-55.jp$ svn commit -m "removing log files" ← コミット Deleting log/development.log Deleting log/production.log Deleting log/server.log Deleting log/test.log Committed revision 5. xxx:/home/www/2.5-55.jp$ svn propset svn:ignore "*.log" log/ ← ログは無視リストへ property 'svn:ignore' set on 'log' xxx:/home/www/2.5-55.jp$ svn update log/ ← アップデート At revision 5. xxx:/home/www/2.5-55.jp$ svn commit -m "Ignoring all files in /log/ ending in .log" ← コミット Sending log Committed revision 6. xxx:/home/www/2.5-55.jp$ svn move config/database.yml config/database.example ← DB設定ファイルはリネームしておきます A config/database.example D config/database.yml xxx:/home/www/2.5-55.jp$ svn commit -m "Moving database.yml to database.example to provide a template for anyone who checks out the code" ← コミット Adding config/database.example Deleting config/database.yml Committed revision 7. xxx:/home/www/2.5-55.jp$ svn propset svn:ignore "database.yml" config/ ← database.ymlは無視リストへ property 'svn:ignore' set on 'config' xxx:/home/www/2.5-55.jp$ svn update config/ ← アップデート At revision 7. xxx:/home/www/2.5-55.jp$ svn commit -m "Ignoring database.yml" ← コミット Sending config Committed revision 8. xxx:/home/www/2.5-55.jp$ svn remove tmp/* ← tmp以下も削除 D tmp/cache D tmp/pids D tmp/sessions D tmp/sockets xxx:/home/www/2.5-55.jp$ svn propset svn:ignore "*" tmp/ ← 無視リストへ property 'svn:ignore' set on 'tmp' xxx:/home/www/2.5-55.jp$ svn update tmp/ ← アップデート At revision 8. xxx:/home/www/2.5-55.jp$ svn commit -m "ignore tmp/ content from now" ← コミット Sending tmp Deleting tmp/cache Deleting tmp/pids Deleting tmp/sessions Deleting tmp/sockets Committed revision 9. xxx:/home/www/2.5-55.jp$ svn propset svn:ignore ".htaccess" public/ ← .htaccessは無視リストへ property 'svn:ignore' set on 'public' xxx:/home/www/2.5-55.jp$ svn update public/ ← アップデート At revision 9. xxx:/home/www/2.5-55.jp$ svn commit -m "Ignoring dispatch.fcgi" ← コミット Sending public Committed revision 10.

この項、続く

参考

  1. こちら(→http://wwwaku.com/blog_part2/2008/02/14/rails%e3%81%a8subversion%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9/)の通りに進めていきました。大変助かりました。ありがとうございました。