こんにちは。菜笑なえです。
今回は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 WITH
が2.0.2
となっていればOKです。
Gemfile.lock
ファイルの差分をコミットして、デプロイすれば完了です。
$ git add .
$ git commit -m 'bundler version up (2.0.2)'
$ git push heroku master
理由に関しては最後に記載しています。
Bundler1系を利用する場合
Gemfile.lock
ファイルのBUNDLED WITH
に1.*.*
と表示されている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 公式サイト
- Ruby apps with Bundler 2.x now receive version 2.0.2 | Heroku Dev Center
- Heroku Ruby Support | Heroku Dev Center