自作スクリプトによるRailsアプリの始め方

railsコマンドでひな形を作れるけど、そこからさらにSubversionにimportしたり、Capistranoをapplyしたりを毎回手動でやるのは面倒だよね、ということでスクリプトを書いた。
スクリプト実行中にリポジトリを作成する都合上、リポジトリはローカル決めうち。リモートのリポジトリを使うなら、sshを使ってリモートでsvnadmin createすればいいかな?

#!/bin/sh

if [ "$#" = 0 ]; then
    echo "usage: create-rails.sh dir"
    exit 1
fi

RAILS='rails'
RAILS_APP_DIR=$1
RAILS_APP_NAME=`basename $1`
SVN_TARGET=${HOME}/var/svn/repos/${RAILS_APP_NAME}

if [ -d ${SVN_TARGET} ]; then
    echo "Error:"
    echo "  ${SVN_TARGET} already exists."
    exit 1
fi

if [ -d ${RAILS_APP_DIR} ]; then
    echo "Error:"
    echo "  ${RAILS_APP_DIR} already exists."
    exit 1
fi

if [ ! -d `dirname ${RAILS_APP_DIR}` ]; then
    mkdir -p `dirname ${RAILS_APP_DIR}`
fi

if [ ! -d `dirname ${SVN_TARGET}` ]; then
    mkdir -p `dirname ${SVN_TARGET}`
fi

# Create Directories for "svn import"
mkdir -p ${RAILS_APP_DIR}/trunk

# Create Rails Application
cd ${RAILS_APP_DIR}/trunk
${RAILS} ${RAILS_APP_NAME}
cap -A ${RAILS_APP_NAME}

# Create Subversion Repository
svnadmin create --fs-type fsfs ${SVN_TARGET}

# Import
cd ../
svn import -m "import ${RAILS_APP_NAME}" . file://${SVN_TARGET}

# Remove imported directory
cd ../
rm -rf ${RAILS_APP_NAME}

# Checkout working copy
svn co file://${SVN_TARGET}/trunk/${RAILS_APP_NAME}

cd ${RAILS_APP_NAME}

# Remove log files
svn remove log/*
svn ci -m 'remove logfiles'
svn up

# Add ignore property for log files
svn propset svn:ignore '*.log' log/
svn ci -m 'ignore log/*.log'
svn up

# Rename database.yml
svn move config/database.yml config/database.example.yml
svn ci -m 'rename database.yml'
svn up

# Add ignore property for database.yml
svn propset svn:ignore 'database.yml' config/
svn ci -m 'ignore database.yml'
svn up

cp ./config/database.example.yml ./config/database.yml
cd ../

これをrails-create.shという名前で保存して、ディレクトリを引数にして実行すればOK。

> rails-create.sh work/test