#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
を忘れないように