はじめに
Rubyアプリケーションが成長するにつれて、これらのアプリケーションが使用する外部ライブラリの数も同じ割合で増加する可能性があります。場合によっては、高速ではないにしても。この成長は、gemが依存関係をインストールするときに問題を引き起こす可能性があります。 2つのgemが同じライブラリの異なるバージョンに依存している場合、両方のgemをインストールすると、gemの非互換性が原因でエラーシナリオが作成されるリスクがあります。 Ruby gemであるBundlerは、これらのgemを管理し、競合を回避する簡単な方法を提供します。これにより、サポートライブラリの問題をトラブルシューティングする代わりに、アプリケーションのコードに集中できます。
前提条件
- ルビーバージョン–2.2.1以降
注:この記事では、テキスト編集にvimを使用しています。別のテキスト編集ツールを使用する場合は、「vim」を選択したエディターに置き換えてください。 (そして、誤ってvimでスタックしていることに気付いた場合は、スタックを解除するためのヒントをいくつか紹介します。)
。
複雑な相互依存関係の管理
アプリケーションの複雑さが増すにつれて、アプリケーションのgemsetでバージョンの競合が発生する可能性があります。これらの競合により、使用するgemの数(およびgemの相互依存性の数)が増えるにつれて、アプリケーションが正しく機能しなくなる可能性があります。 RVMをより制限的な方法で使用することを検討するかもしれませんが、このソリューションでは、現在のRubyバージョンと関連するgemsetを制御する機会しか与えられません。同じベースバージョンを使用する異なるgemバージョン間で発生する可能性のあるgem依存関係の問題は処理されません。 Ruby言語。すべてのgemの依存関係を調べてこれらの競合を見つけ、互換性のあるgemバージョンをダウンロードすることは、長くて退屈なプロセスです。幸い、Bundler gemを使用してgemsetを管理し、共有ライブラリの使用から当て推量を取り除くことができます。
。
宝石を管理するためのBundlerのインストール
Bundlerの使用を開始するには、最初にgemをインストールする必要があります:
gem install bundler
Rubyのバージョンによっては、
gem2.2 install bundler
の形式を使用する場合があることに注意してください。 。
このコマンドは、Bundlerを現在のRuby実行環境にインストールします。次に、アプリケーションのgemを管理するためのGemfileを作成する必要があります。アプリケーションのルートディレクトリに新しいファイルを追加し、編集用に開きます。
vim Gemfile
注:Bundlerは、デフォルトでファイル名
Gemfile
を検索します 、示されているとおりに大文字で表記されます。たとえば、ファイルにgemfile
という名前を付けた場合は失敗します。 。
この時点でgemを追加するか、外部のgem依存関係がない場合はファイルを空のままにしておくことができます。 Bundlerは、アプリケーションのgemをダウンロードしてインストールするときにこのGemfileを使用します。
。
Gemfileの構造
Gemfileは、アプリケーションのgemセットを管理するためのさまざまな方法を提供します。たとえば、Gemfileで新しいgemソースを指定できます。これは、インストールの実行時に検索されます。
source 'https://rubygems.org'
gem
という単語を前に付けて個々の行に配置することで、新しいgem依存関係を簡単に追加できます。 。たとえば、次の行はnokogiri
を指定しています アプリケーションのgem依存関係として:
gem 'nokogiri'
おなじみのRubyGems構文を使用して、特定のgemバージョンを指定することもできます。次の行はRailsgemを追加しますが、Railsバージョン3.0.0.beta3に制限します:
gem 'rails', '3.0.0.beta3'
特定の環境でのみ実行されるgemグループを指定することもできます。たとえば、次のブロックはrspec
をインストールします 、guard
、およびfactory_girl
Rails環境がtest
の場合 またはdevelopment
:
group :test, :development do gem 'rspec' gem 'guard' gem 'factory_girl' end
これらの例はほんの始まりに過ぎません。 bundler.ioには、Gemfileの他の便利な機能がいくつかあります。
。
Bundlerを使用したすべてのGemsのインストール
インストールするgemをGemfileに入力したら、次のコマンドを使用して、現在の環境のすべてのgemをインストールできます。
bundle install
このコマンドは、Gemfileを解析し、システムとGemfile自体の両方で使用可能なソースから指定されたすべてのgemを追跡します。すべてのgemで共有の依存関係を調べてから、新しいファイル(Gemfile.lock
)を生成します。 )互換性のあるすべてのgemとそのバージョンが含まれています。最後に、作成されたGemfile.lock
を移動します ファイル、関連する各gemをインストールします。完了すると、アプリケーションのgemがアプリケーションコードで使用できるようになります。
。
その他の便利なBundlerコマンド
共有の依存関係を持つgemの管理からすべての頭痛の種を取り除くことに加えて、Bundlerは、アプリケーションのgemセットを管理できる他のいくつかのツールも提供します。以下は、開発中に役立つと思われるコマンドの例です。
Gemfile内のすべてのgemを互換性のある最新バージョンに更新するには:
bundle update
本番環境では、利用可能なすべてのソースからgemを動的に解決するのではなく、Gemfile.lockで指定されたgemのみをインストールすることをお勧めします。
bundle install --deployment
アプリケーションのGemfileのコンテキスト内でコマンドを実行するには:
bundle exec XXXX
bundle exec
を追加せずに 、コマンドXXXXは、互換性のないgemを含む可能性のあるシステムRubyコンテキストで実行されます。
ここで、他の使用可能なコマンドとその使用目的を確認できます。
。
結論
プログラミング言語に共通する問題は、2つ以上のサードパーティライブラリが同じ共有ライブラリの異なるバージョンに依存している場合に発生する「依存関係地獄」の概念です。 Bundlerは、Ruby開発者に、複雑なgemセットのインストールと管理の両方のための使いやすいツールを提供します。これは、すべての依存関係の問題を解決するのに役立ち、アプリケーションのすべての依存関係の互換性レコードを提供します。 Bundlerを使用することで、消費されたgemの競合をすばやく解決し、アプリケーションコードの要点に戻ることができます。
Atlantic.Net
Atlantic.netは、VPSホスティングと、ホスティングパッケージにビジネスに不可欠なマネージドサービスのレイヤーを含むマネージドホスティングサービスを提供します。詳細については、今すぐお問い合わせください。
。
。