Techioz Blog

Heroku 上の Rails アプリを Ruby 3.2.2 から Ruby 3.3.0 にアップグレードすると、スラッグ サイズが大幅に増加し、その結果、スラッグ サイズが大きすぎるビルド エラーが発生します

概要

https://dashboard.heroku.com/apps/empora-rails-staging にデプロイされた Rails アプリは現在、.ruby-version と Gemfile を介して Ruby バージョン 3.2.2 を使用するように設定されています。このように構成すると、ビルド ログによると、圧縮されたスラッグ サイズは次のようになります。

-----> Compressing...
       Done: 178.6M

.ruby-version と Gemfile 内で Ruby のバージョンを 3.3.0 に変更し、それらの変更を加えてブランチをデプロイすると、このビルド ログによるとスラッグ サイズが 500 MB の制限を大幅に超えているため、ビルドは失敗します。

-----> Compressing...
 !     Compiled slug size: 559.6M is too large (max is 500M).

コンパイルされたスラッグのサイズを減らすためにいくつかのことを試しましたが、大きな違いはありません。

Ruby のアップグレードによって、コンパイルされたスラッグ サイズにこれほど大きな違いが生じ、このアプリが大きくなりすぎるというのは、私には奇妙に思えます。

Ruby のアップグレードがこのように動作する理由を理解したいと思います。現在 500 MB を超えているコンパイルされたスラッグのファイル/詳細を確認するために、アプリのビルド内でできることはありますか?

解決策

なぜこれが起こっているのかがわかりました。 Ruby 3.3より前のバージョン。アップグレードすると、Gemfile.lock には次のようなプラットフォーム固有のバージョンの grpc が含まれます。

    grpc (1.60.0-arm64-darwin)
       google-protobuf (~> 3.25)
       googleapis-common-protos-types (~> 1.0)
     grpc (1.60.0-x86_64-darwin)
       google-protobuf (~> 3.25)
       googleapis-common-protos-types (~> 1.0)
     grpc (1.60.0-x86_64-linux)

プラットフォーム固有のバージョンの grpc は現在、Ruby 3.3 と互換性がありません (この問題を参照してください)。

そのため、現在は Heroku のデプロイ中にビルドする必要がある単一の grpc 依存関係を含めています。これにより、Heraku にバンドル インストールが行われ、2 GB を超える grpc の完全なソースがダウンロードされます。

プラットフォーム固有のバージョンの grpc が Ruby 3.3 と互換性を持ったら、元に戻してこのスラッグ サイズの問題を解決できるようになります。