herokuデプロイ時やmodel作成時に現れたerror:You must use Bundler 2 or greater with this lockfile.への対処法
2019年に入ってからbundlerのversionが2.0.1になってから現れた問題のようなのですが、あまり日本語記事がなかったので自分の問題解決経緯を共有させていただきます。
herokuへのデプロイ時
localにてbundler2.0.1でgem等をinstallしている人に出てくる問題みたいなのですが、
(自分のbundlerのversionをcheckしたいと言う人は、terminal等アプリケーションのディレクトリで、$vi Gemfile.lock、最後の文に書いてあります。)
herokuにデプロイしようとすると、You must use Bundler 2 or greater with this lockfile.のような警告文が出ます。
これは$heroku buildpacks:set https://github.com/bundler/heroku-buildpack-bundler2とすれば解決します。herokuのbuildpacksが新しいbundlerに対応していないっぽいのでサードパーティ(?)でできるようにしたものみたいです。
model生成時
僕の場合、さらにherokuへのdeploy時だけでなく、model生成の時にも、bundle exec rails g model ...とすると、You must use Bundler 2 or greater with this lockfile.と出てきたので、これはもしやlocalのbundler -v2.0.1自体がダメなのかなと思い、とりあえずversionを変えることにしました。変え方は、
1.gemfile.lockを消す
2.$gem install bundler -v 1.17.3などとして前のversionのbundlerをinstall
3.$bundler _1.17.3_ installなどとして再度gemを入れ直す
4.新しくできたgemfile.lockを確認して、BUNDLED WITH 1.17.3みたいなことが書いてあれば、多分できます
すると、普通にできました。
補足知識
Gemfile.lockは最初のbundle installで作成され、そこにはinstallしたgemとそのversionが書かれている。
Gemfileを書き直して、bundle installしたら、gemfile.lockも書き換わる
bundle updateすると、gemfile.lockを無視して最新のgemがinstallされるので、bundle updateはあまりしないこと。
また、bundle installの際は--path vendor/bundleを書けば、railsアプリのルートディレクトリの下のvendor/bundleディレクトリにインストールされ、MacPCにインストールせずに、そのアプリケーションの中だけ(vender/bundleのところ)にインストールされる。次回以降--path vendor/bundleを書く必要はない。
bundlerのgemを使う際は、bundle execを忘れないように
参考