環境
Ubuntu20.4
Ruby2.6.0
はじめに
自分の開発環境から別の環境にRailsのソースを移行して、bundlerを動かそうとしたところ、動かないといった問題に遭遇したため、そのトラブルシュートの記事です。
Bundelrの公式サイトのBlogによると、この問題に関する是正内容が、2019年1月4日の記事で発表されています。わりと古い内容なので、今更な話題ではあります。
内容
Bundlerのバージョンを確認したところつぎのエラーが発生しました。
$bundle -v
Traceback (most recent call last):
2: from /usr/local/rbenv/versions/2.5.0/bin/bundle:23:in `<main>'
1: from /usr/local/rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
/usr/local/rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
こちらの環境にbundlerはちゃんとインストールされています。
$gem list | grep bundler
bundler (2.0.2)
自分の開発環境のbundlerのバージョンを確認したところ、移行先の環境とbundlerのバージョンが異なることが判明しました。
$bundle -v
Bundler version 1.17.2
結果的には、別環境のbundlerをv2からv1にバージョンダウンさせることで問題は解決されました。
$bundle install -v '1.17.2'
$bundle -v
Bundler version 1.17.2
原因は?
bundlerとrubygemsの依存性の問題があったようです。移行先の環境では、rubygemsが2.7、bundlerが2.0.2で、自分の環境では、rubygemsが2.6、bundlerが1.17.2でした。このバージョンどうしの組み合わせでは問題はないのですが、bundlerが2.0.2の環境にrubygems2.6を持ち込んだところ、bundlerが動かなくなりました。そもそも、bundler v1では、rubygemsが2.7以降が動かないようです。
bundlerをrubygems2.7以降に対応させるには、bundler v2にバージョンアップさせる必要があります。rubygemsを2.7より古いバージョンで使いたい場合は、逆にbundlerをv1にバージョンダウンさせて対応せざるを得ないことになります。