異なる環境でBundlerで管理しているgemライブラリーに関するトラブルが生じたとき

Rails 3.0からは、gemライブラリーをつかうとき、Bundlerというシステムで管理している。使いたいgemライブラリーをGemfileに明記しないといけない。

それで、2つの異なる環境で同じRailsプロジェクトを動かそうとしたとき、開発環境と本番環境でgemライブラリーのバージョンが違っていたためハマった。

開発環境は、rake 0.8.4 が入っており、本番環境は rake 0.8.7 が入っていた。本番環境で、rakeを使おうとすると「0.8.4をつかえ」と何度もメッセージが出る。理由は、開発環境と本番環境でGemfile.lockを共有していたため、Gemfile.lockは、bundle install コマンドを実行すると生成される。Gemfileの内容は同じでも、gemライブラリーが異なるとGemfile.lockの内容は異なる。なので、以下のようにするべき。

  1. 開発環境と本番環境ではGemfile.lockは共有しない
  2. 開発環境と本番環境ではそれぞれGemfile.lockを生成する
% bundle install (ネット上からライブラリー情報を得るとき)
% bundle install --local (既にインストール済みのgemライブラリーから生成するとき)

gemライブラリーのバージョンに関するメッセージがでたらGemfile.lockを一度削除して、bundle install コマンドで再度生成してみることをおすすめする。