Rails4やるのでrbenvでrubyのバージョン上げたりbundler整備したりの手順
頑なにRailsやらずにPadrinoとかでやってきたけど、何となく気が向いたのでRailsやるかなってことで、まず「Ruby on Rails チュートリアル:実例を使って Rails を学ぼう」読んだ。
で、ついでに1.9ベースだった環境も2.1ベースにしようかなってことで作業したのでメモ。
方針
前提
- rbenv導入済み。
手順
まず「rails new」するときに「Test::Unitを除外(代わりにrspec)」「bundle installしない」をデフォルトにする。
今回は「--skip-bundle」なくても手順的には問題ないのだけれど、うっかり「rails new」ってやってrbenvの共通のところにワーってgem群が入ると悲しいので入れておく。
echo "-T --skip-bundle" >> ~/.railsrc
次にrbenvを最新にする。
cd ~/.rbenv git pull cd ~/.rbenv/plugins/ruby-build git pull
「bundle exec」とかも毎回やりたくないので、勝手にbinstubsの中を見てくれるようにrbenv-binstubsを導入(Rails4以降はプロジェクトフォルダ直下のbinフォルダをrails自体が使うのでbundle時にそこを上書きしないよう後でbinstubsのオプションをつける必要がある)。
cd ~/.rbenv/plugins git clone git://github.com/ianheggie/rbenv-binstubs.git
rbenvが新しくなると以下のコマンドで表示されるインストール可能なrubyバージョンも新しくなる。
rbenv install -l
今回は2.1.1とか入れてみる。さすがにちょっと時間掛かる。
インストールされてるバージョンは「rbenv versions」で参照。デフォルトのバージョンは「rbenv global」で指定。「ruby -v」で2.1.1が出ればOK。
rbenv install 2.1.1 rbenv versions rbenv global 2.1.1 ruby -v
bundlerは単独で導入する。ここで使うgemコマンドも2.1.1についてきたものが使われる。
rbenv管理下の実行ファイルが増えた場合は「rbenv rehash」で更新する必要がある(「~/.rbenv/shims」参照)。
gem install bundler rbenv rehash
下ごしらえは上記で完了だが、railsプロジェクト作成時にコツがあるのでそれも記載。
通常は「rails new 【プロジェクト名】」でさっくり作ってしまうが、まずこれを実行するのにrails本体がないといけない。で、そのために普通に「gem install rails」とするとrbenv配下にワーってrailsが依存するgem群もろともインストールされてしまう。
だからそれがいやなんだってばよ。
と、いうことで手でプロジェクトフォルダを作り、Gemfileも自分で書いてから「--path」と「--binstubs」を明示してrailsも含めて「bundle install」する。なお、一度オプションをつけて実行すれば「/.bundle」内に設定が残るので次からは同じプロジェクトフォルダ内ではオプションを省略して実行できる。
Gemfileは「bundle init」でも生成されるが、どうせ「# gem "rails"」の「#」を除去するし現時点では2行しかないので普通にコマンドで書いちゃう。
mkdir ~/foo cd ~/foo cat << EOT >> Gemfile source "https://rubygems.org" gem "rails" EOT bundle install --path=vendor/bundle --binstubs=vendor/bin rails new . # 上書きしても良いか聞かれるので「Y」で上書きする。 bundle update
おまけに.gitignoreも新しくしてrspecのフォルダ作ってgit管理を開始するなど。
cat << EOT > .gitignore /.bundle /db/*.sqlite3 /db/*.sqlite3-journal /log/*.log /tmp /vendor/bin /vendor/bundle *.swp *~ .project .DS_Store .idea .secret EOT rails generate rspec:install git init git add . git commit -m 'initial commit'