2010-12-05 12 views
28

現在のベストプラクティスに従って、これらのそれぞれの適切な役割は何ですか?Rubygems、Bundler、およびRVMの関係

私はBundlerとRVMの制限された理解に基づいて、Rubygemsのように、それらが宝石のための独自のインストール場所を持っていると思われます。さらに、それぞれにはsudoまたはホームディレクトリを使用してシステムパスにインストールするオプションがあります。そして、Bundlerを使ってベンダーの宝石を作る能力があります(例えば、Railsの場合など)。

  • Rubygemsのシステムパス
  • Rubygemsのユーザーパス
  • RVMシステムパス
  • RVMユーザーのパス
  • :今宝石をインストールするには、少なくとも7つの場所があるよう

    は、だから、私には見えます

  • バンドルシステムパス
  • バンドルユーザパス
  • Ven dor(アプリごと)

これをすべて管理するにはどうすればよいですか? 3つすべて(Rubygems、Bundler、RVM)を使用して、すべての人に同じ場所に宝石をインストールするよう伝えますか?私たちは常にsudoを使用しますか、いくつかの時間、または決して使用しませんか?そして、我々は生産と開発の機械で異なる戦略を使用すべきか?

関連するノートには、Rubygemsの周りのBundlerとRVMのラッパーがありますか、それらの代替品ですか、それとも完全に直交していますか?バンドラーのwebsiteから

答えて

31

バンドラーは、あなたのアプリケーションが起動し、エラーなしで実行する必要がある依存関係を持っていることを確認することが容易になります。

これは、いくつかの他の開発者のための些細なのですか、別のマシン上で、bundle installを実行することによって、それをさらに開発したり、使用する準備ができて取得するには、あなたが起動して実行するために必要なすべてを持っていることを意味します。

RVMは、同じマシン上の複数のバージョンのRubyを管理し、それらを切り替えるためのものです。 GemsetsはRVMが提供する強力な機能で、システムの残りのアプリケーション/ライブラリの宝石を隔離します。

RVMとBundlerを併用すると、RVMはBundlerにGemをどこに送るべきかを指示し、BundlerはそれらをRVM-folderにインストールします。

両方とも(RVMのケースでは宝石に関して)Rubygemsを使用し、依存しているので、それらはラッパーに最も近いものです。

私は個人的にすべてのプロジェクトにBundlerとRVMを使用します。 Gemsetはなく、Bundlerだけが解決して解決することができます。宝石のインストールはsudoなしで行われ、RVMで定義された場所で終了します。Rubyは私のシステムにインストールするデフォルトでは、放置されて、何も私は(まだかかわらず、ビットを試して)、今それを行う方法がこれです

+0

sudo/rvmsudoを使用していますか? – rlkw1024

+0

いいえ、本当に必要なものは見つかりませんでした。 – PerfectlyNormal

+1

あなたの答えは非常に明確でした。 rvmがインストールされていない場合、どこにバンドルが宝石をインストールしますか。 – Anand

3

Rubygemsのシステム/ユーザー・パスにインストールされていない:

  1. 使用RVM Rubyのバージョンとアプリケーション用のgemsetを設定します。正しいルビーとgemsetが常に使用されていることを確認するために、アプリケーションディレクトリのルートに.rvmrc-fileを使用します。

  2. Bundlerは、指定されたジェムセットでsudoなしのgemを使用してインストールされます。

  3. アプリが必要とする宝石は、アプリのGemfileに追加され、Bundlerを使用してインストールされます。私はこれにsudoを使用していません。

このように、私はBundlerを使用して各アプリケーションの依存関係を追跡し、RVMは各アプリケーションの宝石を互いに隔離します。実際には本当にスムースに動作します。

デプロイメントサーバにまだRVMをインストールしていないので、Bundlerを使用して各アプリケーションの依存関係を確実に処理しています。私はおそらくそこにRVMをインストールするかもしれませんが、最初にPassengerとボールがどのように関係するかを理解しなければなりません。

あなたの最後の質問として、Bundlerは宝石のラッパーであり、RVMは宝石がインストールされているgempathを操作するだけです。それは同じ場所から宝石を拾うほど賢明だと思われますが、すでに他の宝石にインストールされているものを再コンパイルする必要はありません。

私は、RVMの使用を開始した後に宝石をインストールするためにsudoの使用を停止しました。 rvmユーザパスにそれらをインストールするだけでは本当に理由はありません。あなたが同じマシンにテストサーバーなどの開発者を増やしている場合は、ベストプラクティスについてはわかりません。

+0

"RVMを使ってアプリケーションに使うルビーバージョンとgemsetを設定する" - このGemsetはどのようにGemfileとBundlerとやりとりしますか? – rlkw1024

+1

gemsetは、システムの残りの部分から完全に分離して、空になり始めます。 BundlerとGemfileは同じことをやっていますが、グローバルではなくgemsetにインストールされています。 – PerfectlyNormal

+0

ありがとう!特定のアプリケーションで作業するときに正しいgemsetに切り替えるか、Bundlerがそれを処理できますか? – rlkw1024

関連する問題