0
0

RailsアプリをHerokuからDokkuへ。「client intended to send too large body」の対処法

Last updated at Posted at 2024-04-07

個人開発で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にコピーしていざテストをしていると、画像アップロード機能で以下のエラーが出ることに気づきました。

var/log/nginx/my-app-error.log
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でした。

0
0
0

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
0
0