Open2

エラー:Rack::Multipart::MultipartTotalPartLimitError

iizkiizk

new relicにて上記エラーを検知
エラーメッセージ:Maximum total multiparts in content reached

iizkiizk

どんな時に起きる?

Rackがマルチパートリクエスト(主にファイルアップロードや複数のフォームパラメータを含むPOSTリクエスト)を処理する際に、「受信したパート(フォームフィールドやファイルなど)の合計数」が設定された上限(デフォルト4096)を超えた場合に発生する。

マルチパートとは?

multiparts(マルチパート)とは、1つのリクエストやメッセージの中で「複数のデータ(パート)」をまとめて送信できる仕組みです。
Webの世界では、特にmultipart/form-dataという形式がHTMLフォームからファイルやテキストデータを一緒に送るために使われます。

じゃあ、APIとフロントが分離しており、APIがjson形式で送るだけ、とかだったらあまり起きることはない?

絶対に起きないわけではありませんが、発生する可能性は一般的に低くなります。

理由
API分離構成では、一般的にJSONなどの軽量データ形式で通信することが多い
フロントエンドとバックエンドがAPI(RESTやGraphQLなど)でやり取りする場合、データはほとんどがJSON形式で送信されます。この場合、multipart/form-dataのように大量の「パート」が発生しにくいです。

ファイルアップロード時だけmultipartが使われる
画像やファイルのアップロード機能をAPI経由で実装している場合のみ、multipart/form-dataが利用されます。このときだけパート数制限に注意が必要ですが、通常のAPI通信では問題になりません。

なるほど、ファイルアップロードはそれ専用のAPIが用意され、格納先のURLがjson形式の送信データに含まれる、みたいな実装が多いから、multipartsの上限エラーはあんまり起きないということか。

今回のエラーが起きたのが、
Railsのmonorepoかつ、テキストやファイルアップロードを含むフォームで、フォームを動的に増やせる
ものだったので発生したと思われる。