That creates a rails application under app_name.
If app_name is a subversion working copy, rails is set as an external and generated files are committed, and some ignore properties are set.
Here's how I'd go about creating a versioned rails app:
mkdir -p happy_app happy_app/trunk happy_app/tags happy_app/branches svn import happy_app http://myserver/myrepos/happy_app -m "Layout for happy_app" rm -rf happy_app svn co http://myserver/myrepos/happy_app/trunk happy_app railstrunk happy_app
$rails_dir is set at the beginning of script, and it should be a path to a working copy of rails trunk on your machine. It's merely used to speed things up, it's not necessary.
Notice I remove the silly public/index.html from the generated app.
And now the code:
#!/bin/bash rails_dir=~/code/ruby/rails if [ $# != 1 ]; then echo "Usage: $0 app_name" echo echo "Creates a rails application under app_name." echo echo "If app_name is a subversion working copy, rails is set as an external" echo "and generated files are committed." echo echo "If $rails_dir exists, things are sped up by either symlinking it" echo "(for non-versioned apps) or copying it to the vendor dir." echo echo "$rails_dir should be a rails trunk working copy." exit fi dir=$1 mkdir -p $dir cd $dir if [ -n "`ls`" ]; then echo "Can't create app: $dir is not empty." >&2 exit 1 fi if [ -d $rails_dir ]; then if [ "`svn info $rails_dir 2>/dev/null | grep URL:`" != "URL: http://dev.rubyonrails.org/svn/rails/trunk" ]; then echo "$rails_dir is not a rails trunk working copy. Not going to use it." >&2 elif [ -n "`svn st $rails_dir`" ]; then echo "$rails_dir is modified. Not going to use it." >&2 else use_rails_dir=1 fi fi if [ -z "`svn info 2>/dev/null`" ]; then mkdir vendor if [ -n "$use_rails_dir" ]; then ln -s $rails_dir vendor/rails cd vendor/rails svn up cd ../.. else svn co http://dev.rubyonrails.org/svn/rails/trunk vendor/rails fi ruby vendor/rails/railties/bin/rails . rm public/index.html else svn mkdir vendor svn ps svn:externals 'rails http://dev.rubyonrails.org/svn/rails/trunk' vendor svn ci -m 'set rails external to rails trunk' [ -n "$use_rails_dir" ] && cp -r $rails_dir vendor/rails svn up ruby vendor/rails/railties/bin/rails . rm public/index.html rm log/* mv config/database.yml config/database.yml.sample svn add . --force svn ps svn:ignore '*' tmp/cache tmp/pids tmp/sessions tmp/sockets svn ps svn:ignore 'database.yml' config svn ps svn:ignore '*.log' log svn ci -m "- created rails app - moved database.yml to database.yml.sample - deleted public/index.html - ignored logs and tmp" cp config/database.yml.sample config/database.yml fi