#author("2020-09-22T07:59:36+00:00","default:src128","src128") #author("2021-08-31T04:36:11+00:00","default:src128","src128") &tag(Bundler); *目次 [#b0f3038c] #contents *関連ページ [#b900de7b] -[[Gemfile]] -[[./gemパッケージ作成]] *参考情報 [#pc172cbe] -[[Bundler: The best way to manage a Ruby application's gems:http://gembundler.com/]]…公式 *概要 [#c0e87f56] -使用するgemsを管理するためのツール *使用方法 [#s6d488cd] **参考情報 [#c52e7abe] -[[Bundler: The best way to manage a Ruby application's gems:http://bundler.io/]] -[[橋本商会 » Ruby書くならBundler使え:http://shokai.org/blog/archives/7262]] **簡単にGemfileだけを使う方法 [#g8f67aab] -Gemfileを用意する。例えばActiveRecordを単独で使用する場合 #pre{{ source 'https://rubygems.org' gem 'activerecord' gem 'mysql2' }} -インストール。vendor/bundle以下にgemが追加される。 $ bundle install --path vendor/bundle -使用する。自分のscriptの先頭で以下のようにかいて、ruby hoge.rbのように実行すると、vendor/bundle以下のgemを使ってくれる。 #pre{{ require "rubygems" require "bundler/setup" require "active_record" }} [[ruby - Are bundle exec and require 'bundler/setup' equivalent? - Stack Overflow:http://stackoverflow.com/questions/11117112/are-bundle-exec-and-require-bundler-setup-equivalent]]に、bundle execとbundle/setupの違いの説明あり。 **アプリのひな形を作成 [#y4d67c77] -gemとしてインストール可能なアプリのひな形を作る事も出来る(-bで実行ファイルも作ってくれる。-tがつくとテストファイルも作ってくれる) bundle gem sampleapp -b -t #rspecが適用 bundle gem sampleapp -b --test=minitest #minitestが適用 *Gemfile [#b937dfec] **requireってなに? [#n1448ca4] -[[ruby on rails - Bundler: What is the :require => false on the gemfile means? - Stack Overflow:http://stackoverflow.com/questions/4800721/bundler-what-is-the-require-false-on-the-gemfile-means]]によると、require => falseが指定されたものは、ダウンロードはされるが自動的にrequireはされないといいうこと。 -require するときの名前をかえることもできるらしい。 *Tips [#b7d0452d] **パス指定の省略 [#lb751466] -buldle install のパス指定を省略する。[[bundler - bundle install するときに vendor/bundle を省略する方法 - Qiita:http://qiita.com/toshiwo/items/4e7c82852f3e14bf5a1d]] -~/.bundle/configに以下を記述。bundle configで確認できる。 #pre{{ --- BUNDLE_PATH: ./vendor/bundle }} **パッケージの命名規則 [#y6f7c4c7] -[[Name your gem - RubyGems Guides:http://guides.rubygems.org/name-your-gem/]]が参考になる。アンダースコアは単語の区切り、ハイフン(ダッシュ)はパッケージ階層として解釈されるので使い分けたほうが良い。 -パッケージ名にハイフンを使う場合注意が必要 [#z37b810f] -[[Create a Ruby Gem. Real World, play by play. Part 1:http://minimul.com/create-a-ruby-gem-real-world-play-by-play-part-1.html]]にもあるようにパッケージ名にaaa-bbbのようにハイフンを挟むとaaa/bbbのような深いフォルダが作成されてしまう。これを避けるためには、ハイフンを使わない、アンダースコアを使う、自分でフォルダ構造を変更するなどの工夫が必要になる。 *トラブルシューティング [#a2a85f78] **You must use Bundler 2 or greater with this lockfile. [#m7c6d209] -2021/08/31(火)実行時に上記エラーが発生。 -Gemfile.lockを削除してbundle updateする。 **Gemfileでgitリポジトリを指定したgemが更新されない [#fcc3b78b] -gemspecでバージョンが上がっていれば「bundle update」で更新できる => 利用する側に手を入れるのが一番よい(と思ったけどだめかも)。さわれない場合vendor/bundleを削除して入れなおすしかない? **gem install bundlerでエラー発生 [#be610b6c] -以下のようなエラーが発生する。 #pre{{ $ gem install bundler ERROR: Could not find a valid gem 'bundler' (>= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz) }} -[[Gem install fails with SSL certificate connection error · Issue #1736 · rubygems/rubygems:https://github.com/rubygems/rubygems/issues/1736]]によるとRubyの古いのが原因?たしかに2.3.0だと発生するけど2.4.0だと大丈夫だった。 ** 「because its extensions are not built. Try: gem pristine」エラー [#fc22bea6] -Capistranoでデプロイしようとして発生。キャッシュとインストールされたgemファイルの内容が不一致になっている「gem pristine --all」で解消するとの情報もあり。 -とりあえずエラーではない(警告?)のようなので放置。 **bundle installで「Bundler could not find compatible versions for gem "bundler"」 [#b62f28c7] -bundle install時に以下のようなエラーが表示される。 #pre{{ Bundler could not find compatible versions for gem "bundler": In Gemfile: bundler (~> 1.16) Current Bundler version: bundler (2.0.1) This Gemfile requires a different version of Bundler. }} -エラーメッセージの通りGemfile.lock(およびそのもとになったGemfile)のbunlderのバージョンと、システムのバンドラーのバージョンが異なる。 -bundler 2.xの互換性がbundler 1.xとないためこのようなトラブル多発(2019/05/03(金))。Gemfile.lockの「BUNDLE WITH」で指定されたバージョンにあわせるか(2.xをアンインストールして1.xをインストールする) -RubyGemsの場合.gemspecのbundlerのバージョンを上げても良いかもしれない。 **can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException) [#f9e4127c] -Gemfile.lockの「BUNDLE WITH」で指定されているbundlerのバージョンと実際にインストールされているbunlderのバージョンが異なるのが原因。 -bundlerがv2.0.0にバージョンアップしてこのエラーが発生するようになった? -BUNDLE WITHに指定されているバージョンをインストールするか、Gemfile.lockを削除してupdateする。 **Could not find gem 'bundler (< 2.0, >= 1.3.0)', [#ud22e96d] -古いRailsアプリでbundle installしようとするとエラー。 -現在のバージョンの2.1.4。をアンインストールして1.X系の最新版をインストールする。[[Redmineインストール時にgemパッケージのインストールで失敗 - Qiita:https://qiita.com/k-yoshiyuki/items/a57775c959cac056f0fd]] gem uninstall bundler -v2.1.4 gem install bundler -v1.17.3 -もしくは古いバージョンを明示する。[[bundlerのバージョンを固定してbundle installする方法 - Qiita:https://qiita.com/Nedward/items/ee70b8196398dc1e3017]]