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