rvmのgemsetを使ってbundlerと賢く付き合う方法
bundlerを使うとRubyアプリケーションごとに閉じたgemの依存関係を構築できるので、gemのバージョンの違いや環境ごとの違いで悩まされることが減ります。
これは非常に便利なのですが、rakeやunicornのようにコマンドをインストールするgemの場合、
pre>>
% bundle exec unicorn
<<--
のように、bundle execを介して実行する必用があって面倒です。
しかし、rvmを使えばこれを賢く解決できます。
比較的新しめのrvmとbundlerが必用になるので、
あらかじめ最新版をインストールしておいてください。
まず、以下のように適当なアプリケーション名などでgemsetを作ります。
pre>>
% rvm gemset create foo-app
<<--
作成したgemsetは
pre>>
% rvm gemset use foo-app
<<--
のようにしてアクティベートできます。新規に作成したgemsetの中身は
こんな感じになっています。
pre>>
% gem list
*** LOCAL GEMS ***
bundler (1.0.2)
rake (0.8.7)
<<--
bundler-1.0.2はちょっと古いので、gem udpateして最新のbundlerにします。
この状態であらかじめ用意しておいたGemfileに従ってgemをインストールします。
pre>>
% bundler install --system
<<--
これで foo-app gemset にはGemfileで指定したgem群が入った状態になり、rake, unicornなどのコマンド群もrvmがいい感じに取り計らってくれます。
あとは、rvm gemset use xxx を使えば適宜必用なgem環境を切り替えることができます。
ただ、アプリケーションが複数ある場合に、頻繁にgem環境を切り替えるのは面倒です。
アプリケーションのrootディレクトリに .rvmrc というファイルを作って
pre>>
rvm use ruby-1.8.7-p302@foo-app
<<--
のように記述しておいておくと、cd した時にrvmが勝手にgemsetを切り替えてくれます。これで完璧ですね!
Bye bye gem hell!