はじめに
動機
しばらくnpm(Node.jsのパッケージ・マネージャ。プロジェクト毎にモジュールをインストールすることができる)を使っていたので、同じようなことをRubyでやってみました。
目標
- プロジェクト毎にRubyのバージョンを分ける
- プロジェクト毎にインストールするgemを分ける
下準備
RVMのアンインストール
$ rvm seppuku
「切腹」って・・・
あと、.bash_profile や .bashrc にもrvmのパスなどが残っているので、消す。
グローバルにインストールされたgemのアンインストール
以下の魔法のようなコマンドで、基本的なgem以外のすべてのgemを削除してしまいます:
$ gem uninstall -axI `gem list --no-versions | egrep -v 'test-unit|rdoc|bigdecimal|io-console|json|minitest|psych|rake'`
rbenvのインストール
$ brew install rbenv ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
インストール可能なRubyのバージョンのリストを表示
$ rbenv install -l
Available versions:
1.8.6-p383
1.8.6-p420
...
...
rbenv管理下にRubyをインストール
$ rbenv install 2.2.0
インストール済みRuby一覧を表示
$ rbenv versions
system
* 2.2.0 (set by /Users/USERNAME/.rbenv/version)
2.1.5
グローバルにbundlerをインストール
bundlerはグローバルにインストールします:
$ gem install bundler
1. プロジェクトにRubyをインストール
ローカルのフォルダにRubyをインストール
$ mkdir app
$ cd app/
$ rbenv local 2.2.0
$ rbenv version
2.2.0 (set by PROJECT_FOLDER/.ruby-version)
2. プロジェクトにgemをインストール
ローカルにGemをインストール
$ mkdir -p vender/bundle
$ vim Gemfile
$ bundle install --path vender/bundle --binstubs=bundle_bin
-
--path vender/bundle
はgemをインストールするフォルダの指定 -
--binstubs=bundle_bin
はあとでbundle exec
を省略するためのオプション
ローカルインストール済みの gem のリストを表示
$ bundle list
Gems included by the bundle:
* rack (1.6.4)
* rack-protection (1.5.3)
* shotgun (0.9.1)
* sinatra (1.4.6)
* sinatra-cross_origin (0.3.2)
* tilt (2.0.1)
Gemの実行ファイルの実行
$ rbenv exec shotgun -v
binstubsを設定しているので以下のようにしなくて良いです:
$ rbenv exec bundle exec shotgun -v
IRBの実行
$ rbenv exec irb
補足
rbenv管理下のRubyを削除
$ rbenv uninstall 2.1.5
デフォルトで使うRubyのバージョンを指定
$ rbenv global 2.2.0
$ rbenv version
2.2.0 (set by /Users/USERNAME/.rbenv/version)
ローカルにインストールしたRubyを削除
Rubyのバージョンはデフォルトのものになります。
$ rbenv local --unset
rbenv exec
を短くする
いちいち入力するのは大変ですよね。
$ alias re='rbenv exec'
参考文献
Ruby の gem をプロジェクト毎に Bundler で管理する - fugafuga.write()
rbenvのよく使うコマンドまとめ - TASK NOTES
ブログやってます:http://weed.nagoya