gem update --system したら gem update bundler もね!
Sass やら Compass やらの普及で、フロントエンドな人も Ruby や gem に触れることが増えたけど、こないだ調子こいて gem をアップデートしたら、rails server でエラーが出て、rails で作られたシステムが起動できなくなってしまった・・。
エラーの内容はこんな感じだけど、bundler のバージョンはちょっと違ったかも(メモしてなかった)。
/usr/local/rvm/gems/ruby-1.9.3-p385@global/gems/bundler-1.1.5/lib/bundler/rubygems_integration.rb:187:in `stub_source_index170': uninitialized constant Gem::SourceIndex (NameError)
ぜんぜん分からなくて泣いていたら、ほ神ら先生が助けてくれたので、忘れないようにメモします。
やったこと
gem のバージョン確認
$ gem -v 2.0.3
gem のバージョンは、2.0.3 で新しい。むしろエラー出てない人より新しい。これのせい?
bundler もアップデート
$ gem update bundler
いろいろインストールされました。
bundler のバージョン確認
$ bundle -v Bundler version 1.3.4
新しくなった。そして rails server できるようになりました!
解説
gem の bundler が何かを、Node.js に例えて分かりやすく教えてもらえました。
- Ruby の gem は、パッケージ管理ツールで、Node.js だと npm みたいなもの。
- npm の場合はプロジェクトごとに管理できるし、-g でグローバルにもできる。
- でも gem はグローバルしかできない(Node.js で言う -g だけ)。
- プロジェクトごとの管理は、bundler が行う。
- gem と bundler の 2 つを合わせて、Node.js の npm みたいに使える。
分かりやすい・・!ほかちゃんは説明の天才か。
まとめ
gem update --system
したら、
gem update bundler
もした方が安全。特に gem がメジャーアップデートとかしてたら、やった方がいいかも。