【2019年7月最新】Rails Herokuデプロイ時のbundlerエラー解決方法 [かなりハマった…]

heroku

こんにちは。菜笑なえです。

今回はRailsアプリをHerokuにデプロイした時のエラーについての備忘録です。

エラー文にPush rejected とあったので、gitが原因かなとか思いましたが、bundler が原因でした。

しかも2019年6月25日にHerokuの仕様が変更されたことが影響していたので、今見てるあなたにも当てはまる可能性 大 です!

解決法

Bundlerのバージョンを2.0.2 に変更すれば解決です。
現在の設定はGemfile.lock から確認してください。

BUNDLED WITH
   2.0.2

このように表示されればOKです。

2.0.1 と記載されていたら、2.0.2 に更新して再度bundle install も実行しましょう。

$ gem install bundler -v 2.0.2
$ rm Gemfile.lock
$ bundle install --without production

Gemfile.lockファイルの、BUNDLED WITH2.0.2 となっていればOKです。

Gemfile.lockファイルの差分をコミットして、デプロイすれば完了です。

$ git add .
$ git commit -m 'bundler version up (2.0.2)'
$ git push heroku master

理由に関しては最後に記載しています。

Bundler1系を利用する場合

  • Gemfile.lockファイルのBUNDLED WITH1.*.* と表示されている
  • Gemfile.lockファイルにBUNDLED WITHの記載がない

こちらに当てはまる場合は、bundler: 1.15.2 を使用してください。
以下を実行すればOKです。

$ gem install bundler -v 1.15.2
$ rm Gemfile.lock
$ bundle install --without production
$ git add .
$ git commit -m 'bundler version up (2.0.2)'
$ git push heroku master

エラー内容

(省略)

remote:        Bundle completed (174.50s)
remote:        Cleaning up the bundler cache.
remote: -----> Installing node-v10.15.3-linux-x64
remote: -----> Detecting rake tasks
remote:
remote:  !
remote:  !     Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
remote:  !     Activating bundler (2.0.1) failed:
remote:  !     Could not find 'bundler' (2.0.1) required by your /tmp/build_88bd7bd8d41cd591c16ef891d3dd1f6f/Gemfile.lock.
remote:  !     To update to the latest version installed on your system, run `bundle update --bundler`.
remote:  !     To install the missing version, run `gem install bundler:2.0.1`
remote:  !     Checked in 'GEM_PATH=/tmp/build_88bd7bd8d41cd591c16ef891d3dd1f6f/vendor/bundle/ruby/2.6.0', execute `gem env` for more information
remote:  !
remote:  !     To install the version of bundler this project requires, run `gem install bundler -v '2.0.1'`
remote:  !
remote: /app/tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/lib/language_pack/helpers/rake_runner.rb:106:in `load_rake_tasks!': Could not detect rake tasks (LanguagePack::Helpers::RakeRunner::CannotLoadRakefileError)
remote: ensure you can run `$ bundle exec rake -P` against your app
remote: and using the production group of your Gemfile.
remote: Activating bundler (2.0.1) failed:
remote: Could not find 'bundler' (2.0.1) required by your /tmp/build_88bd7bd8d41cd591c16ef891d3dd1f6f/Gemfile.lock.
remote: To update to the latest version installed on your system, run `bundle update --bundler`.
remote: To install the missing version, run `gem install bundler:2.0.1`
remote: Checked in 'GEM_PATH=/tmp/build_88bd7bd8d41cd591c16ef891d3dd1f6f/vendor/bundle/ruby/2.6.0', execute `gem env` for more information
remote:
remote: To install the version of bundler this project requires, run `gem install bundler -v '2.0.1'`

(省略)

remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !    Push rejected to post-link-download.
remote:
To https://git.heroku.com/post-link-download.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/post-link-download.git'

なぜこれでデプロイできるのか

Herokuはbundlerのバージョンを固定しているので、Herokuが指定しているバージョン以外のBundlerではデプロイできません。

そして2019年6月25日にHerokuがbundler: 2.0.2 に対応し、Bundler2系を使用した場合のバージョンを2.0.1から、2.0.2 に変更し固定しました。

そのため、今までと同じようにbundler: 2.0.1 を使用しているとエラーが出るので、2.0.2 にして解決ということです。

環境

macOS Mojave 10.14.5
Ruby 2.6.3
Bundler 2.0.2
Rails 5.2.3

おわりに

これまでの記事だとbundler: 2.0.1 を使用しましょう!というものばかりで、最初は2.0.1 を使用してるのにエラーが出る理由がわかりませんでした。

公式の最新情報を確認する大切さを改めて感じる一件でした。

参考文献

Heroku 公式サイト

SNS

Twitter:@nae310_
Instagram:310nae