読者です 読者をやめる 読者になる 読者になる

CGIで128MBよりもデカイファイルをアップロードするには(定数の変更)

Ruby

gmailで困ったというメールが来たのでチケット化してみました。
https://bugs.ruby-lang.org/issues/8370
cgi.rbでは、一度にアップロードできるファイルサイズの上限を
定数で決めています。

CGI::MAX_MULTIPART_LENGTH = 128 * 1024 * 1024

件のメールでは、どうも、定数で上限が
決まっているから困ったと言っているようです。
しかし、Rubyは恐ろしいことに、定数は上書きラクショーです。
そのつもりで定数化しているのでした。

require 'cgi'
CGI.class_eval{remove_const(:MAX_MULTIPART_LENGTH)}
CGI::MAX_MULTIPART_LENGTH = 512 * 1024 * 1024

いきなり代入すると、warningが出て、気分が悪いので、
一旦remove_constしてから代入するとよろしいです。
 
Rubyってすごいですよね。
通常は定数で定義されていたら諦めるんだと思います。
 
なんでチケット化したかというと、仕様に取り込むかどうかを
決めたかったからですね。