アプリ毎にRails3のバージョンを指定してrails newするスクリプトをつくってみた
まだ Rails 始めたばっかで右も左も分かってないですが、
プロジェクト毎に rails3 のバージョンを変えれるようにしたくて
- まず一時領域で rails3 自身を Bundler でインストールして
- ↑でインストールした内容で rails new して
- 一時領域を削除
みたいなことを毎回するの面倒そうだなと思ってスクリプトをつくってみた。
ついでにテストフレームワークを Test::Unit から RSpec に変更する処理も追加しといた。
#!/bin/sh prj_path=$1 # プロジェクトルートのパス prj_name=$2 # rails new で指定するアプリ名 rails_version=$3 # インストールしたい rails のバージョン tmp_path=$1"/_tmp" mkdir $tmp_path cat << EOF > $tmp_path"/Gemfile" source :rubygems gem "rails", "$rails_version" EOF # 一時ディレクトリでrailsプロジェクト生成 cd $tmp_path bundle install --path vendor/bundle bundle exec rails new $prj_name --skip-bundle -J -T # 一時生成したrailsプロジェクトと一時生成でつくられたvendor/bundleをプロジェクトルートに移動 echo "mv "$tmp_path"/"$prj_name"/* "$tmp_path"/"$prj_name"/.??* "$prj_path | sh echo "mv "$tmp_path"/vendor/bundle "$prj_path"/vendor/bundle" | sh rm -rf $tmp_path # .bundle/configファイル追加 mkdir -p $prj_path"/.bundle" cat << EOF > $prj_path"/.bundle/config" --- BUNDLE_PATH: vendor/bundle BUNDLE_DISABLE_SHARED_GEMS: "1" BUNDLE_BIN: bin EOF # Gemfileにgem追加 cat << EOF >> $prj_path"/Gemfile" group :test do gem 'rspec-rails' end EOF # 改めて bundle install cd $prj_path bundle install # config/application.rbにtest_frameworkの設定を追加 LF=$(printf '\\\012_') LF=${LF%_} sed -i -e 's/version\(.*\)/version\1'"$LF$LF"' config.generators do |g|'"$LF"' g.test_framework :rspec'"$LF"' end/' config/application.rb
使い方は↑のシェルスクリプトを rails-starter.sh みたいな感じの名前で保存して下記のように実行するだけです。
$ cd /path/to/working_directory $ mkdir hoge $ sh ~/bin/rails-starter.sh /path/to/working_directory/hoge hoge 3.2.12