2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Heroku-20へデプロイ時に、Failed to install gems via Bundler.が出てしまった。

Last updated at Posted at 2021-06-17

Rubyもアップデートし、これでherokuへプッシュできるかと思いきや、
今度は別のエラーが...

#発生したエラー

〜省略〜
remote:        Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote:        is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote:        --add-platform x86_64-linux` and try again.
remote:        Bundler Output: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote:        is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote:        --add-platform x86_64-linux` and try again.
remote: 
remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed
〜省略〜

うーん、よく分からないので、
Failed to install gems via Bundler.
↑でググってみた。

すると、同じような状況を解説した記事がいくつかヒットした。

この手のエラーの原因の1つに、ローカルとHerokuで、bundlerバージョンの不一致が起きているというケースがあるらしい。

エラー文をよく見ると

remote: -----> Installing bundler 2.2.16

Herokuではbundler 2.2.16をインストールしており、ローカルのbundlerのバージョンと一致していないことがわかった。

#試した方法
ローカルのbundlerのバージョンをHerokuのものと一致させた。

$ gem uninstall bundler   //ローカルのbundlerをアンインストール
$ gem install bundler --version '2.2.16'  //Herokuのbundlerと同じバージョンをインストール
$ bundler -v  //適用されたbundlerのバージョンを確認

次に、変更前のbundlerのバージョンで作成されているGemfile.lockを削除し、新しいbundlerのバージョンで作り直す。

$ rm gemfile.lock  //Gemfile.lockを削除
$ bundle _2.2.16_ install   //新しいバージョンで作り直す

これでOK!
かと思いきや、Herokuへ再度プッシュするも、再度同じエラーが...。

どうやら他にも原因があるらしい...。

エラー文を読み返してみると、

〜省略〜
remote:        Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote:        is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote:        --add-platform x86_64-linux` and try again.
〜省略〜
あなたのバンドルは["x86_64-darwin-20"]プラットフォームのみサポートしてるけど、ローカルのプラットフォームがx86_64-linuxだよ。 bundle lock --add-platform x86_64-linuxを実行して、現在のプラットフォームをロックファイルに追加してからまた試してみて。

??? なんのこっちゃ。(勉強不足...)

#原因
どうやら、bundlerを実行できるプラットフォームが制限されているために起こるエラーらしい。

#詳細
bundlerのバージョンが2.2.◯〜の場合、bundlerが実行できるプラットフォームは、開発をしている環境のOSのみに制限されている。(デフォルトの段階で)
自分の場合、macOSで開発を行っているが、その他のOSではbundlerが実行できないというワケだ。

解決方法

エラー文にも記載があったように、以下のコマンドでデプロイ先のプラットフォームを追加する。

$ bundle lock --add-platform ruby
$ bundle lock --add-platform x86_64-linux

Gemfile.lockを開き、

PLATFORMS
  ruby
  x86_64-darwin-20
  x86_64-linux

このようになっていたらOK!

再度Herokuへプッシュ...デプロイ成功!

#参考
https://yumishin.com/heroku-push-error/
https://www.autovice.jp/articles/150
https://www.moncefbelyamani.com/understanding-the-gemfile-lock-file/

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?