F.Ko-Jiの「一秒後は未来」

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

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入門」公開しました。興味あったけどまだ手を出していなかったという方、このタイミングでいかがですか?

  1. 宮田雅元 より:

    ありがとうございます。マジで助かりました。

    私の場合、webpackerというgemがwebpackというコマンドをインストールしてしまい、nodeのwebpackが見えなくなっちゃいました。通常webpackerはrailsに入れるものでグローバルには入れません。なんかの折に私が突っ込んでしまったようです。そういう事情なので`rbenv: webpack: command not found`なんかで検索しても全くかかりませんでした。

    ~/.rbenv/shimsのwebpackを削除してもすぐ現れるのに気づいて、その辺りからこちらにたどり着きました。

    • fkoji より:

      コメントありがとうございます。
      だいぶ以前の記事でしたがお役に立てたようで良かったです!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など