ネットサービスとかGoogleとか豆知識とか。

Index > プログラミング > rbenvでuninstallしたはずのgemに対するスクリプトが~/.rbenv/shimsに残り続けててハマった
プログラミング
2013年07月18日 15:05

rbenvでuninstallしたはずのgemに対するスクリプトが~/.rbenv/shimsに残り続けててハマった

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

rbenv を使っていて gem でライブラリをインストールすると、実行ファイルは ~/.rbenv/shims の下に作られるスクリプト経由で実行されるらしい。

例えば gem で vagrant をインストールしていると、

% which vagrant
/Users/fkoji/.rbenv/shims/vagrant

こんな感じになる。

で、例えば複数のバージョンの Ruby で同じ gem をインストールしていると、いずれかのバージョンで gem uninstall をしても、残りのバージョンでアンインストールされてなければ ~/.rbenv/shims の下に起動スクリプトは残ったままになる。

なので、

% vagrant
rbenv: vagrant: command not found

The `vagrant' command exists in these Ruby versions:
  2.0.0-p0

こんな感じで「vagrant コマンドは 2.0.0-p0 のほうにあるよ!」と教えてくれる。

で、何が困ったかというと、gem でインストールした vagrant を uninstall をしてから最新のバージョンの Vagrant をMac用のインストーラーでインストールした時。

gem uninstall vagrant をして rbenv rehsh したのに、なぜか ~/.rbenv/shims にある vagrant が残ったままで、仕方ないので直接 ~/.rbenv/shims/vagrant を削除しても何かのタイミングで再び生成されてしまうという。

で、よくよく調べてみると先に述べたように ~/.rbenv/shims の下のスクリプトは、いずれかのバージョンの Ruby に gem がインストールされていたら、現在有効にしているバージョンにインストールされてなくても生成されるという仕組みでした。

なので、gem で vagrant がインストールされていた全バージョンの Ruby からきちんと vagrant を uninstall して rbenv rehash すると、

% which vagrant
/usr/bin/vagrant

無事、 /usr/bin/vagrant が使われるようになったという話。ちょっとハマった。

Stack Overflow に同じ事象の投稿があったけど、これは別の問題だったのだろうか。根本的な原因は同じかも。
» ruby - rbenv continually generating vagrant shim - Stack Overflow

昨日ドットインストールで「Vagrant入門」公開しました。興味あったけどまだ手を出していなかったという方、このタイミングでいかがですか?