Bundler-gemを管理するためのマネージャー

バンドラーとは何ですか?


これは、Rubyアプリケーションでgemの依存関係を管理するためのマネージャーです。 このユーティリティを使用すると、インストールされているシステムに依存せずに、アプリケーションに必要なgemを簡単にインストールできます。 開発にRailsを使用した場合は、enviroment.rbでconfig.gemを使用してgem依存関係を定義した方法を思い出してください。Bundlerはこの問題をはるかに便利で簡単に解決します。 デフォルトでRails 3.0に含まれていましたが、現在、このバージョンのフレームワークでgemの依存関係を管理するために使用されています。 このユーティリティは、任意のrubyフレームワークに使用できます。

設置


他のgemと同様にこのユーティリティをインストールします。

gem install bundler

Rails 3.0では、デフォルトで使用されるため、他に何もする必要はありません。 また、Rails.2.3.xの場合は、次の手順に従う必要があります。 最初から、Rails.boot!の前にboot.rbに次のコードを追加します。

class Rails::Boot
def run
load_initializer
extend_environment
Rails::Initializer.run(:set_load_path)
end

def extend_environment
Rails::Initializer.class_eval do
old_load = instance_method(:load_environment)
define_method(:load_environment) do
Bundler.require :default, Rails.env
old_load.bind(self).call
end
end
end
end


次に、次の内容を使用してconfig / initializersディレクトリにpreinitializer.rbファイルを作成します。

begin
# Require the preresolved locked set of gems.
require File.expand_path('../../.bundle/environment', __FILE__)
rescue LoadError
# Fallback on doing the resolve at runtime.
require "rubygems"
require "bundler"
Bundler.setup
end


構成


バージョン3.0で新しいRailsアプリケーションを作成した後、Gemfileファイルは既にプロジェクトルートに存在します。これはBundlerの構成です。 Rails 2.3.xのバージョンでは、自分で作成する必要があります。 これを行うには、プロジェクトディレクトリに移動し、次のコマンドを実行します。

bundle init

このファイルは、必要なすべてのgem依存関係を定義します。 この構成ファイルが提供する機能を正確に検討してください。

最初に、gemがデフォルトでインストールされる場所からリソースが指定されます。

source 'http://gemcutter.org'

多くの人がすでに知っているように、 gemcutter.orgリソースはgemを保存するための一種の標準になります。そのため、設定を作成すると、このリソースはデフォルトでインストールされます。 ただし、 gems.github.comで言うか、必要なだけリソースを追加して、簡単に置き換えることができます。

source 'http://gemcutter.org'
source 'http://gems.github.com'
source 'http://gems.rubyforge.org'


以下は、アプリケーションが機能するために必要なgemのリストです。

gem 'will_paginate'
gem 'oauth'
gem 'money'


ここで、gemをグループに組み合わせて、特定のグループのみを設定できることに注意してください。

group :development do
gem 'rspec'
gem 'populator'
gem 'faker'
end

group :production do
gem 'memcache-client'
end


宝石をグループに結合する別の形式が利用可能です:

gem 'rspec', :group => 'development'
gem 'populator', :group => 'development'
gem 'memcache-client', :group => 'production'


デフォルトでは、すべての宝石はデフォルトグループに含まれています。
gemの特定のバージョンが必要な場合は、その番号を設定できます。

gem "rack", "1.0.1"
gem "rails", ">=2.3.2"


Bundlerライブラリの接続中に接続されるファイルの名前を指定することができます。 デフォルトでは、これはgemの名前であるため、ほとんどの場合、何も指定する必要はありません。 接続のファイル名を指定できるオプションはrequireと呼ばれ、次のように使用されます。

gem 'gchartrb', :require => 'google_chart'

gemをダウンロードするためにgitリポジトリを指定する必要がある場合は、gitオプションを使用する必要があります。

gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git'

使用する


現在は必要なすべてのgemを設定しているため、次のコマンドを実行する必要があります。

bundle install

このコマンドは、すべての依存関係を解決し、欠落しているgemをインストールします。 さらに、次を実行すると:

gem list

そうすると、バンドラーを使用してインストールされたgemは表示されなくなります。 インストールされているすべてのgemは〜/ .bundlerディレクトリにあります。 彼はどこから接続しましたか。
次のコマンドを使用して、インストールされているgemのリストを表示できます。

bundle show

目的のgemがすでにシステムにインストールされている場合、リンクが作成されます。 Gemfileを変更するたびに、インストールコマンドを実行する必要があります。 〜/ .bundlerフォルダーはオプションです。別のフォルダーにgemをインストールする場合、これは簡単です。

bundle install ./vendor/bundler_gems

覚えているなら、設定ファイルですべてのgemをグループに含めることができるので、インストール中にインストールしないgemグループを指定できます:

bundle install —without test

テストにのみ必要なgemを実稼働サーバーにインストールする理由を考えてみましょう。
gemに実行可能ファイルがある場合、次のように実行できます。

bundle exec cassandra_helper cassandra

アプリケーションの開発が完了したら、Gemfileの変更をブロックする必要があります。

bundle lock

このコマンドを実行すると、Gemfile.lockファイルが作成されます。このファイルには、コンピューターにインストールされているgemに基づくすべての依存関係が含まれます。 これは、アプリケーションが正常に動作するgemバージョンを修正するために行われます。 このファイルは次のようになります。

---
dependencies:
faker:
group:
- :development
version: ">= 0"
memcache-client:
group:
- :test
version: ">= 0"
sqlite3-ruby:
group:
- :default
version: ">= 0"
oauth:
group:
- :default
version: ">= 0"
specs:
- stomp:
version: 1.1.4
- populator:
version: 0.2.5
- json:
version: 1.2.0
- thrift:
version: 0.2.0
- thrift_client:
version: 0.3.3
- rspec:
version: 1.3.0
- ruby-hmac:
version: 0.4.0
- oauth:
version: 0.3.6
hash: 0ac3c8666943a1e2294be2851316d83791479451
sources:
- Rubygems:
uri: gemcutter.org


同時に、Gemfileを変更してインストールコマンドを実行しようとすると、gemがブロックされているため、インストールは実行されません。 すでにロックされた状態の新しいgemをインストールするには、relockinstall stall --relockパラメーターを指定してインストールコマンドを実行し、コマンドを実行して、変更をブロックする必要があります。

bundle install --relock

バンドラーは、gemをパッケージ化する機能を提供します。

bundle pack

このコマンドを実行すると、必要なすべてのgemがvendor / cacheディレクトリに保存されます。その後、このディレクトリからgemのインストールが行われます。 このオプションは、実動サーバー上の公開リポジトリーからgemをインストールできない場合にのみ役立ちます。

この便利なユーティリティについてお伝えしたかったのはそれだけです。 少なくとも1時間は彼女と一緒に仕事をしてみてください。彼女が好きになると思います。

Source: https://habr.com/ru/post/J85201/


All Articles