指導している学生の頭の中に「なんでそうなるの説明して。」と常に問いかける私がインストールできたら教育成功。数年後に「何でそうなるの説明して。」と自問自答できるようになり、頭の中の私が消えたら教育完了。
科学・技術政策で神経衰弱をやろう!
異なる環境で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の内容は異なる。なので、以下のようにするべき。
- 開発環境と本番環境ではGemfile.lockは共有しない
- 開発環境と本番環境ではそれぞれGemfile.lockを生成する
% bundle install (ネット上からライブラリー情報を得るとき) % bundle install --local (既にインストール済みのgemライブラリーから生成するとき)
gemライブラリーのバージョンに関するメッセージがでたらGemfile.lockを一度削除して、bundle install コマンドで再度生成してみることをおすすめする。