web-dev-qa-db-ja.com

バンドラーvs RVM vs gems vs RubyGems vs gemsets vsシステムruby

Rubyが初めてで、次の概念に頭を包み込もうとしています。バンドラーvs RVM vs gems vs RubyGems vs gemsets vsシステムrubと私は混乱しています。

Ubuntuの最新バージョンの新規インストールでこれをすべて管理する方法の「ベストプラクティス」を誰かに説明していただけますか?何をインストールする必要があり、どのようにすべてを使用する必要がありますか?

私はSudo apt-get install Rubyは推奨されませんが、よくわかりません。私は「他のすべてのRuby stuff」に加えてシステムでそれを試しました。それは単に混乱を増しているだけです。Rails通常のRuby gems(Vagrant、Chef、scriptsなど)。

90
user779159

前の回答によると、これはカバーすることが非常に多いので、これを短い紹介と考えてください。

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

Bundlerは、gemの管理に耐えられるものです。 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のセットです。これは、たとえば、それぞれが独自のgemセットを持つさまざまなアプリケーションを開発していて、それらを分離したい場合に便利です。

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

始めたばかりの場合は、gemsとbundlerに興味があります。現時点では、RVMとgemsetを脇に置いておくことができます。

166
Martin

1つの質問で、スタックオーバーフローの範囲よりも多くの情報を求めています。それをすべてカバーするには本が必要です。

Ubuntuでは、Rubyの「システム」バージョンにgemを簡単にインストールおよび削除できるため、Sudoを介して通常のgemをインストールおよび削除することに慣れてください。 (Mac OSでは、Apple bundles Ruby独自の使用のため、それを台無しにするのは素晴らしい考えではないため、異なるアドバイスをします。) gemのアイデア全体がどのように機能するかがわかっていて、システムに複数のRuby=バージョンが必要な場合は、 " rbenv "または " [〜#〜] rvm [〜#〜] "サンドボックスに1つまたは2つのバージョンをインストールします。

Linuxを使用すると、ディストリビューションを介してRubyを簡単に追加/削除できますが、ディストリビューションメンテナがパッケージ化したバージョンに制限されているため、通常はソースからインストールします。 Ruby開発、テスト、および本番システム用のいくつかのバージョン。そのため、 rbenv および [〜#〜] rvm [〜#〜] =発明された-汚れた詳細を処理するため、プログラミングに集中できます。

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

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

1
the Tin Man