個人開発でRailsアプリをHeroku上にて3年ほど運用してきました。
USリージョンでのサーバーレスポンスの遅さにだんだんと耐えられなくなり、さくらのVPSで日本のサーバーに移行しようと思い立ちました。
私のRailsアプリではRedis経由でSidekiqに投げたジョブファイルの結果を、ActionCable(WebScoket)でクライアントに通知する機能があります。ところがたまたまセットアップしていたUbuntuサーバーはPassenger+Apacheの組み合わせであり、PassengerのドキュメントによるとActionCableはPassenger+Apacheでは対応していないとのこと。何人かのユーザーがパッチを当てているものもありましたし、Passenger StandaloneやPassenger+Nginxに組み替えてもよかったのですが、やはりHerokuでのデプロイの簡便さと比べると、今更Linuxのお世話をするコストが重荷になっていました。
そこで、HerokuっぽいPaaSを自前のUbuntu(またはDebian)サーバーに構築できるオープンソースのDokkuなるものがあるとのこと。
https://dokku.com/docs/getting-started/installation/
なんだかんだで順調に構築でき、Herokuで運用中のアプリをまんまDokkuにコピーしていざテストをしていると、画像アップロード機能で以下のエラーが出ることに気づきました。
client intended to send too large body: 5477041 bytes
当該の画像アップロード機能はCarrierwave経由でCloudFlare R2(こちらも以前、Amazon S3に嫌気が差して乗り換えていた)にアップロードする処理だったため、どう考えてもDokku内部のNginxの設定の問題だろうとすぐにわかりました。
ところが、検索してヒットするこちらのページのAnswerでは解決せず。
結果、私の使用しているDokku version 0.34.3では、以下のコード一行で解決しました。
dokku nginx:set myapp client-max-body-size 50m
client_max_body_sizeではなくclient-max-body-sizeでした。