18

明確にするために、私はrbenv自分のルビーバージョンを管理するために使用しています。バイナリはshimsそれぞれの ruby​​ バージョンのディレクトリのように管理されているという印象を受けました。

これは、gem 環境を実行したときにシステムが表示するものです (無関係な部分を除外しています)。

 - GEM PATHS:
     - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1
     - /Volumes/Data/nathan/.gem/ruby/1.9.1

2 か所にする理由はありますか?好奇心旺盛な人は知りたがっています。

4

3 に答える 3

15

この質問に対する答えを見つけたと思うので、投稿します。

Rbenv を使用すると、グローバルおよび/またはローカル バージョンの Ruby を使用できます。したがって、Ruby をインストールして rbenv を介して管理すると、システム全体で使用されるグローバル Ruby バージョンとして宣言できます。

同様に、特定のディレクトリ (例: 特定の rails プロジェクト) 内でローカルの Ruby バージョンを宣言できます。

ホーム パスの .gem ファイルはグローバル Ruby バージョンで使用され、rbenv ディレクトリにあるファイルはローカル Ruby バージョンで使用されます。

(何らかの理由で) グローバル バージョンと同じローカル バージョンを宣言できることに注意してください。その場合、ローカル バージョンは ~/.gem ディレクトリではなく、より深い rbenv ディレクトリにある gem ファイルに依存します。

于 2012-05-11T19:34:09.437 に答える
6

rbenv や rvm などの Ruby バージョン マネージャーは比較的最近作成されたものであることに注意してください。それらが存在する前は、管理者ユーザーは通常、/usr/local のようなシステム全体の場所に ruby​​ をインストールしていました。しかし、非管理者は /usr/local の下に書き込み権限を持っていなかったため、独自の gem をインストールする場所が必要でした。そのため、rubygems の作成者は、現在のユーザーのホーム ディレクトリにセカンダリ gem パスを追加することを決定しました。これは、システムの場所と同様の構造を持つことになります。

以下は、昔の宝石のパスの例です。

 - /usr/local/lib/ruby/gems/1.9.1
 - /Users/kelvin/.gem/ruby/1.9.1

このように ruby​​ がインストールされているマシンがまだ存在する可能性があり、自動セカンダリ gem パスを利用できます。もちろん、GEM_PATH 環境変数を使用してさらにパスを追加することもできますが、auto パスは一般的なケースを処理するのに適しています。

管理者権限を持っている場合、またはバージョン マネージャーを使用している場合は、過去の遺物であるアーティファクトとして ~/.gem ディレクトリを無視することができます。

于 2012-05-11T20:32:47.627 に答える
2
 - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1

は rbenv からのものなので、ruby は rbenv がインストールされている gem を探します。

 - /Volumes/Data/nathan/.gem/ruby/1.9.1

どうやら、rbenv は独自の gem に限定されず、システム ruby​​ からの gem も含めますが、( 経由でgem --user-install) ユーザーとしてインストールされたもののみを含めます。

于 2012-05-05T23:56:54.807 に答える