バンドラーvs RVM vs gems vs RubyGems vs gemsets vsシステムルビー[終了]


102

私はRubyの初心者であり、次の概念に頭を悩ませています:バンドラーvs RVM vs gems vs RubyGems vs gemsets vsシステム摩擦そして私は混乱しています。

最新バージョンのUbuntuのフレッシュインストールでこれをすべて管理する方法の「ベストプラクティス」を誰かが説明できますか?何をインストールし、どのように使用すればよいですか?

を行うことsudo apt-get install rubyはお勧めできないと思いますが、よくわかりません。「他のすべてのRubyのもの」に加えて、自分のシステムでも試してみました。それはただ私の混乱を増しています。私はRailsについて話しているのではなく、通常のRuby gem(例:Vagrant、Chef、スクリプト)についてのみ話します。

回答:


184

前の回答のとおり、これはかなり多くのことをカバーしているので、これを簡単な紹介として考えてください。

gemは、Rubyライブラリのパッケージ方法です。それらはRubyに対するもので、jarはJavaに対するものです。gemファイル内には、Rubyコード(.rbファイル)だけでなく、テスト、および名前、依存関係、バージョンなどのgem自体に関する情報を提供する特別なファイル( gemspec)もあります。Rubyプロジェクトは、依存関係を宣言するだけの Gemfileを介して、必要なgemを定義できます。Rubygemsはパッケージマネージャーの名前です-パッケージのインストールに使用されるツールです(gemはパッケージそのものです)。RubygemsはRubyの一部になりました。

バンドラーは、管理宝石を我慢するものです。Gemfileに基づいて、 bundle installを使用してbundlerを呼び出すだけで、必要なすべてのgemがダウンロードおよびインストールされます。標準のgemコマンドを使用する場合は、を使用してそれぞれを手動でインストールする必要がありますgem install <gem_name>。BundlerはRubyの一部ではありません(それ自体が gemとしてパッケージ化されています)が、ほとんどのアプリケーションの「事実上の標準」です(実際に使用していない人は多くなく、実際に使用しない理由はありません)。

RVMは、マシンにRubyの複数のバージョンをインストールし、必要に応じてそれらを切り替えることができるツールです。これは、Ruby 1.8と1.9、または「MRI」(MatzのRuby、デフォルトの実装)と代替(JRubyやRubiniusなど)の両方のインストールに使用できます。このフィールドではRVMだけではないことに注意してください。たとえば、 rbenvを参照してください。。。

RVM のgemsetは、特定のコンテキスト(通常はプロジェクト)に固有のgemのセットです。これは、たとえば、それぞれに独自の宝石セットがあり、それらを別々に保持したい場合に、異なるアプリケーションを開発している場合に役立ちます。

システムRubyは、RVMを使用する場合、マシンにインストールされているRubyバージョンです(つまり、RVMを介さない)。

始めたばかりなら、gemとbundlerはあなたにとって興味深いものです。今のところ、RVMとgemsetsを脇に置いておくことができます。


1
良い答えですが、明確にしていただけますか?gemとRubyGemsの違いは何ですか?そして、gemspecとGemfileの間?また、「Ruby」に含まれている上記のプログラム(例:バンドラー)と、個別のアプリケーション(RVMは個別であると思います)はどれですか。また、gemsetはRVM内の概念にすぎませんか、それともコアRuby内(または他の答えで言及されているrbenvなど)内にありますか?また、バンドラーによってgemの管理が容易になった場合、バンドル前の方法はどのようでしたか?(つまり、バンドラーなしでgemをどのように管理しますか。私がそのようにしたことがないとしても、そうです。)ありがとうございます。
user779159 2013年

Rubygemsはパッケージマネージャーの名前で、「gem」コマンドで呼び出すのですか?そして、BundlerもRubygemsのようにRuby自体の一部ですか、それとも何らかの形で含める必要がありますか?
user779159 2013年

2
「始めたばかりなら... [今のところ] RVMを今のところ脇に置いておくことができます...」OS Xを使用していない場合、およびインストールして実行するRubyプロジェクトは、OSにプリインストールされているバージョンよりも新しいバージョンのRubyに依存します。次に、RVMが必要になります。
Hephaestus

これは真実ではありません:「標準のgemコマンドを使用すると、それぞれを手動でインストールする必要があります。」単一のコマンド「gem install」を使用して、gemfileにすべてのgemを確実にインストールできます
Andy

1

Stack Overflowの対象範囲よりも多くの情報を1つの質問で求めています。それをすべてカバーするには本が必要です。

Ubuntuでは、gemをRubyの「システム」バージョンに簡単にインストールおよび削除できるため、を介して通常のgemをインストールおよび削除することに慣れていsudoます。(Mac OSでは、AppleがRubyを自分で使用するためにバンドルしていて、それをいじるのは良い考えではないので、私は異なるアドバイスをします。)次に、gemの全体のアイデアがどのように機能するかを考え、複数のシステム上のRubyバージョン。「rbenv」または「RVM」を試して、サンドボックスに1つまたは2つのバージョンをインストールしてください。

Linuxを使用すると、ディストリビューション経由でRubyを簡単に追加/削除できますが、ディストリビューションのメンテナーがパッケージ化したバージョンに限定されているため、通常はソースからインストールします。しかし、Rubyの複数のバージョンを開発、テスト、本番システム用に管理するのは面倒です。そのため、rbenvRVMはが発明されました。これらはダーティな詳細を処理して、プログラミングに集中できるようにします。

私はrbenvRVMの両方を使用しており、過去6か月ほどの間rbenvを使用しており、良好な結果が得られています。それは私が好きなRVMよりも複雑ではありません。どちらの場合も、Gemsの個別のセットを使用して、異なるバージョンを簡単にインストールできます。必要に応じて、異なるRubyのバージョンを異なるターミナルウィンドウで開いて、互換性のテストを容易にすることができます。

デバッグが1つずつ変更を加えることである場合は、ルール1を使用します。これは、プログラミングの学習や新しい言語の学習に当てはまります。気を散らすのではなく、単純にしてください。


1
デフォルトのシステムパッケージマネージャー(aptやapt-getなど)以外のパッケージマネージャーは絶対にsudoしないでください。あなたは必然的にあなたのシステムを台無しにするでしょう。
画像
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.