2011-12-19 3 views
21

gem envを使用したときに見られるgemコマンドで使用される宝石のインストールディレクトリは、のようなものに設定されているので、これは、約来:なぜRuby 1.9.2/1.9.3の宝石を1.9.1フォルダにインストールしていますか?

<base_ruby_dir>/lib/ruby/gems/1.9.1 

私の質問は、なぜですか?

フォルダを呼び出してはなりません。

<base_ruby_dir>/lib/ruby/gems/1.9.x 

または

<base_ruby_dir>/lib/ruby/gems/1.9 

か、他のRubyのバージョンごとには次のように、存在しませんでした:

c:/ruby191/lib/ruby/gems/1.9.1 
c:/ruby192/lib/ruby/gems/1.9.2 
c:/ruby193/lib/ruby/gems/1.9.3 

ありません私が知っている重大な問題は、私は不思議だった。

答えて

28

Ruby 1.9.0では、CのインターフェイスがRuby 1.8シリーズから変更されました。

ネイティブコードにコンパイルする宝石は、再コンパイルする必要がありました。

インターフェイスはRuby 1.9.1で再び変更され、Ruby 1.9.2 &で同じよ​​うに保たれました。これはあなたのパスに表示されている1.9.1について説明しています。

あなたのシステムに異なるバージョンのRubyをインストールでき、その宝石は同じC APIを持つグループ内で共有されるということです。だから、Ruby 1.8.6と1.8.7は宝石を共有することができ、Ruby 1.9.1、.2、.3も同様です。

しかし、必ずしも最良のアイデアではありません。どちらの場合でも、ほとんどの人はrvmを使ってRubyの異なるバージョンにアクセスし、rvmはC APIのバージョンに関係なく、バージョンごとに宝石を保存します。

+0

さて、私はそれを取得します。 1.9.1は、Ruby 1.9.1で使用されているCインタフェースに準拠していることを意味していますか?この種の実装の詳細は公開されていませんか?宝石のエンドユーザーの視点から、私はなぜ気にしますか?そして私は1.9.1と1.9.4のような2つのフォルダを並べて見るつもりですか?そうでなければ、もう一度、なぜ私は気にしますか? – Ben

+0

右。 C Api *は間違いなく実装の詳細を公開しています! Gemユーザーはパスを気にしないでください。最後の2つの質問に対して編集された回答 –

+0

私には、ディレクトリ命名規則に関するすべての質問があります。 RubyのC APIを変更すると、Rubyのそのバージョンを使用しているすべての宝石の再コンパイルが行われることがわかっている場合は、1.9.1という名前の宝石を持ったフォルダ、または* 1.9.2というフォルダがありますまたは何でも)。私が両方のバージョン(Rubyの1つのバージョン用)を持つことができない場合は、1.9.xがより賢明になります。Rubyの複数のバージョンの宝石を保管するのに使用されたフォルダと同じフォルダを見たことはありませんでした。実際は実際のユースケースですか? – Ben

0

これらのバージョンは互換性があり、別のディレクトリがある場合は、すべての宝石をそれに再インストールする必要があるからだと思います。こうすることで、すべてのgemを再インストールせずに、Rubyのバージョンをアップグレードすることができます。

+1

ええ、そうですね。しかし、その場合、なぜ1.9または1.9.xフォルダを呼び出さないのですか?私には奇妙に見えます。 – Ben

+0

Ruby Debianパッケージと同じです。私はruby1.9.1という名前のパッケージから1.9.2をインストールしました。実行可能ファイルの名前も付けられました。 – Linuxios

+0

1.9.xのライフサイクル全体でABIが変わらないという保証はありません(残念ながら)。 1.9.4が突然1.9.1-1.9.3との互換性を失うABIを使用すると、あなたの1.9.xパスが突然不正確に命名されます。 – jgoldschrafe

関連する問題