2011-09-01 4 views
25

私はマイケルHARTLによってrailstutorialを通過初心者プログラマだし、アプリケーションに宝石を使用するためのプロセスはgemfileに追加して、やっていることに気づく:レール3アプリの "gem install"ではなく、 "bundle install"という宝石はなぜですか?

$ bundle install 

任意の理由1つだけをしないだろう:

$ [sudo] gem install [the_gem] 

それからGemファイルに追加しますか?私はこれがレールに戻っていく過程であることを知っています。

ありがとう!

答えて

3

Gemfileを使用すると、あなたのアプリで作業している他の開発者がすべての宝石のバージョンが同じであることを確認できます。また、Gemfileにあるものとは別の[the_gem]をあなたのgemコマンドに入れなかったことを保証します。

36

gemコマンドの代わりにbundlerを使用すると、宝石を直接インストールすることができます。

gemコマンドを使ってGemfileにインストールして後で追加することをお勧めするこの特定のケースでは、gemをインストールするときにbundlerがすべての依存関係を解決します。

あなたの例を与えること、のは次の依存関係をみましょう:

sunspot_rails 
    nokogiri (>= 1.2.0) 

webrat 
    nokogiri (>= 1.3) 

両方webratとsunspot_rails宝石は、依存関係として鋸山の異なるバージョンを必要とします。 gemコマンドを使ってインストールするだけで、nokogiriの両方のバージョンがインストールされたり、バージョンの競合が悪化する可能性があります。 Bundlerはこの依存関係の矛盾を解決し、適切なバージョン(nokogiri 1.3と言う)をインストールし、sunspot_railsとwebratの両方を幸せにするのに十分なほど賢明です!

長い説明は申し訳ありません。しかし、あなたはポイントを得ることを願っています! :)

あなたはこのファイルGemfile.lockを見て、どのバンドラーがあなたのために舞台裏をしているかを見てください。

2

いくつかの宝石の組み合わせは特定の環境でのみ意味があります。開発中の特定のデータベースと、プロダクション内の別のデータベースです。

Gemfileは、アプリケーションが各環境で必要とするもののレコードであり、bundle installは必要なものを正確にインストールし、依存関係を処理します。

あなたのGemfile内の宝石のいずれかが既にあなたの現在のgemsetに(gem install経由で)インストールされている場合、バンドラはそれらを再インストールするのではなく単に使用します。

関連する問題