bundle exec rails g ~が全く機能しなかったので、調査した件。
今回の実行環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G95
今回起きたエラー内容は以下の通りです。
$ bundle exec rails g controller StaticPages home help about
/Users/iori_jp/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/bundler-2.0.2/lib/bundler/runtime.rb:319:in `check_for_activated_spec!': You have already activated bundler 1.17.2, but your Gemfile requires bundler 2.0.2. Since bundler is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports bundler as a default gem. (Gem::LoadError)
適用されているbundler gemのバージョンが1.17.2なので、2.0.2に変更してくださいとのことでした。
上記の参考ページ曰く、bundlerバージョンが1.17.2だと色々面倒らしく、1.17.3に変更した方が良いとのこと。
途中、試行錯誤で試したものが影響を持っている可能性があるため、メモ書き程度で参考にすることをオススメします...
まず、Gemfile.lockのBUNDLED WITHを確認します。
$ cat Gemfile.lock | tail
RUBY VERSION
ruby 2.6.1p33
BUNDLED WITH
1.17.2
Gemfile.lockは、bundle installした時点で作成されます。
(ここでバージョンが1.17.3であれば、問題は別にありそうです。)
この後の作業として、bundlerのdefaultバージョンを 1.17.3、
実行バージョン2.0.2をインストールしてから、bundle installします。
次にbundlerのバーションを確認します。
$ gem list bundler
*** LOCAL GEMS ***
bundler (2.0.2, default: 1.17.2)
$ bundle -v
Bundler version 1.17.2
gem update --systemを実施して、defaultのbundlerバージョンを1.17.3に変更します。
$ gem update --system
bundlerバージョン 2.0.2 をインストールします。
ここでgem install bundler -v 1.17.3のように指定することも可能
今回は最新版である2.0.2を使用するため、指定はしません。
$ gem install bundler
Successfully installed bundler-2.0.2
Parsing documentation for bundler-2.0.2
Done installing documentation for bundler after 1 seconds
1 gem installed
次にGemfile.lockを削除します。
$ rm Gemfile.lock
やっと、bundle install。
ここでpathをオプションに入れることで、bundlerのバージョンをglobalでなく、
localで持つことができます。
$ bundle install --path=vendor/bundle
最後に、catでBUNDLED WITHのバージョンを確認して終わりです。
$ cat Gemfile.lock | tail
RUBY VERSION
ruby 2.6.1p33
BUNDLED WITH
2.0.2
これで無事、bundle exec rails g controller ~~できるようになりました。