Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed.
Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably
ざっくりいうと、Rails のアプリごとに gem パッケージを管理するツールのようです。 つまりは、システム全体で持っている gem とは別に、Rails アプリが独自の gem を持つことになるので、 今回のようにgem パッケージをインストールしたはずなのに Rails の中では使えないという事が起こり得ます。
pathを指定しないと問題が起きる可能性があるのは、かなり特殊な条件下に限られる(100人いたら100人全員が遭遇するような問題ではない)。
/usr/local/lib/ruby/gems/2.7.0/gems
bundle config set path 'vendor/bundle' bundle config set without 'test development'
Bundler3からは以下のコマンドで設定した後に、bundle installしたらOKです。 bundle config set without development test
環境別にgemを管理する $ bundle install --path vendor/bundle --without development test
バンドルされた gem の中から古くなったものを判別してくれる これの便利な所は、Bundler がダウンロードしてインストールする gem を表示するが、実際には実行しないことだ。 これにより gem のリストを調査し、アップデートしたい gem を選択する自由が与えられる。
$ bundle install --path vendor/bundle Bundlerによってインストールするgemをデフォルト($BUNDLE_PATHまたは$GEM_HOME)のディレクトリ以外にする。 一度指定するとBundlerがそのディレクトリを覚えてくれるため、次回以降は指定不要。
Rails について調べてると、bunle execをつける場合とつけない場合の両方の情報が見つかります。なぜかというと、 環境によってどちらを使うべきか変わってくるから です。 今回のように、パスを指定して gem をインストールした場合、 bundle execをつけることで指定したパスの配下にある gem を使って実行します。
Gemfile.lockの記述を無視して、GemfileでのGemの指定やそのバージョン指定などに基づいて、gemを更新する。 更新時にGemfile.lockを更新する。
bundle install Gemfileに書かれたgemパッケージをインストール
bundle install --redownload
bundlerで管理してれば、bundlerであげますが、bundler自身なので $ gem update bundler
bundle updateを実行すると、Bundlerは、gemfileを元にgemのインストールを行います。その後、gemfile.lockを更新します。
$ gem update --system gem自体のバージョンをアップデートする。
エラー対処法 Railsアプリケーションのルートディレクトリで gem install bundler:2.2.22 を実行する。
下記のようにオプションで-vをつけてバージョンを指定すると、そのバージョンのbundlerをインストールすることができる $ gem install bundler -v 1.16.1
設定したBundlerの項目は、bundle configで確認することができます。
bundle cleanup というコマンドを打つとローカルのbundle install先の使われていないGemを綺麗に削除してくれるそうな...
バッチファイルからバッチファイルを呼び出すと呼び出し先のバッチファイルが終了したところで処理全体が停止するのが仕様である。対処法としてはバッチファイル形式の処理実行前にcallをつければ良い。 call bundle -v
gemのrequire前に以下のコードを追加します。 require 'bundler' Bundler.require
bundlerで指定したgemを使う(プログラム内で指定) require 'bundler/setup'
bundler自体もGemなので、Bundlerだけはグローバルにインストールします。 $ gem install bundler
$ bundler -v Traceback (most recent call last): 1: from /opt/homebrew/opt/ruby@2.7/bin/bundler:25:in `<main>' /opt/homebrew/opt/ruby@2.7/bin/bundler:25:in `load': cannot load such file -- /opt/homebrew/lib/ruby/gems/2.7.0/gems/bundler-2.2.23/exe/bundler (LoadError) $ gem list | grep bundler bundler (2.2.23, default: 2.2.22, 1.17.2) $ gem update --system Latest version already installed. Done. $ gem install bundler:2.2.23 Successfully installed bundler-2.2.23 Parsing documentation for bundler-2.2.23 Done installing documentation for bundler after 0 seconds 1 gem installed $ gem list | grep bundler bundler (2.2.23, default: 2.2.22, 1.17.2) $ bundler -v Bundler version 2.2.23
$ gem list | grep bundler bundler (2.5.9, 2.4.12) $ gem uninstall bundler:2.4.12 Successfully uninstalled bundler-2.4.12 $ gem list | grep bundler bundler (2.5.9)