Ruby/gem のインストール パスがあちこちに散らばっているのはなぜでしょうか?

Ruby/gem のインストール パスがあちこちに散らばっているのはなぜでしょうか?

私の Ruby フォルダ構造を理解するのを手伝ってもらえますか? なぜ gem があちこちに散らばっているのか、またなぜコマンドとして認識されないのか理解できません。

まず、私のインストールがどのようになっているかを説明します。

ruby は、
ruby1.8
と ruby​​1.9.1 の両方をサポートします。

1 つ目は、ターミナルで「ruby」コマンドが機能しなかったため、ruby1.9.1 へのソフト リンクです。「gem」でも同じことをしました。ダウンロードして解凍し、setup.rb を実行して ruby​​gems をインストールしました。(「ruby」フォルダーを作成しました)

rubygems-1.7.2 のセットアップ

バイナリ
ファイル

「sudo gem install」でいくつかのgemをインストールしました

> gem list

 *** LOCAL GEMS ***

 compass (0.10.6)
 haml (3.0.25)
 mustache (0.99.3)
 rake (0.8.7)

ここまでは順調ですか? まあ、そうではありません。どうやら「compass version」というコマンドは存在しないようです。フォルダを調べるたびに混乱が増します。たとえば、次のパスは私には意味がわかりません。なぜ隠されているのでしょうか? なぜこのフォルダ内の唯一の gem が mustache なのでしょうか?

/home/pc/.gem/ruby/1.9.1/cache/mustache-0.99.3.gem

まず、ここに「gem 環境」がありますが、これはさらに意味をなさないです。最初の段落で述べたように、rubygems-1.7.2 を確実にインストールしているからです。しかし、ここでは古いバージョン 1.3.7 が表示されます。なぜでしょうか?一昨日Ubuntuをインストールしました。

  RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux]
  - INSTALLATION DIRECTORY: /var/lib/gems/1.9.1
  - RUBY EXECUTABLE: /usr/bin/ruby1.9.1
  - EXECUTABLE DIRECTORY: /var/lib/gems/1.9.1/bin
      - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/1.9.1
     - /home/pc/.gem/ruby/1.9.1
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

ruby --version は「ruby 1.8.7」を返します........... また、結局のところ、すべての gem はこのフォルダーにインストールされます (mustache も! すでに他のフォルダー内にあるにもかかわらず)。これは、「ru​​by environment」が主張しているとおりです。

/var/lib/gems/1.9.1/gems

しかし、これらの gem はどれも機能しません。rake 以外はどれも呼び出せません。おそらくここで間違いを犯したのでしょう。「rake」コマンドが認識されず、コマンド プロンプトがそれを提案したため、「gem install rake」に加えて「apt-get install rake」を使用したと思います。rubygems でも同じことをしたかもしれません... Linux は初めてですが、コマンド プロンプトがこれらのものを適切にインストールする方法を知っているだろうと考えました。

あらゆる場所に syslink を作成しなくてはならないのは普通ではないですよね?Windows ではこの問題は発生しませんでした。

答え1

rvm をインストールしました。なぜこのような混乱が生じたのかまだわかりませんが、今では特定の Ruby バージョンを簡単に強制することができ、すべての gem がどこにインストールされるかがわかりました。(rvm ディレクトリに) 私の場合はうまくいきました。

答え2

問題は、RubyGemsapt-get ではなく手動でインストールしていることだと思います。おそらく、同じことをしたrubyか、手動で作成したシンボリックリンクを含むメタパッケージが不足しています。

/var/lib/gems/1.9.1/binこれは、すべてのバイナリがあるディレクトリが $PATH に含まれていないのと同じ理由です。そのため、これらの gem の実行可能ファイルを見つけることができません。


Ruby 1.8 から Ruby 1.9.3 にアップグレードすると、Ruby 1.8 でインストールされた gem は Ruby 1.8 フォルダーに残ります。異なる Ruby バージョンで RubyGems がインストールされている可能性があります。


たとえば、次のパスは私には意味がわかりません。なぜ隠されているのでしょうか? このフォルダー内にある gem が mustache だけなのはなぜでしょうか?

/home/pc/.gem/ruby/1.9.1/cache/mustache-0.99.3.gem

明らかにmustache(sudoなし)をインストールしました

gem install mustache

これはユーザー用にインストールされ、ユーザーインストールディレクトリは です$HOME/.gem/。このフォルダは非表示になっているため、誤って削除することはありません。$PATH にこれを追加するか、 でインストールする必要があります--no-user-install


解決:

RubyGems(およびruby)を手動でダウンロードしてインストールしないでください。パッケージマネージャー(aptitude)を使用してください。

aptitudeその後、またはを使用して gem をインストールするかどうかを決定できますgem installapt-get または gem によるパッケージのインストール

関連情報