43

Just upgraded to Rails 4.2 and I get Internal Server Error on localhost and in production when trying to edit a model with multiple has_many objects. This is the message I see on the rails s console

!! Unexpected error while processing request: Too many open files - Maximum file multiparts in content reached

The request does not even get to the controller i.e., I DO NOT see the usual following lines in rails s console

Started GET "/feeds/3/edit" for 127.0.0.1 at 2015-01-04 20:07:19 -0800
Processing by FeedsController#edit as HTML
......
......

Any clues?? Using Ruby 2.1.5 upgraded to 2.2 with no luck.

anu
  • 1,076
  • 10
  • 20

3 Answers3

73

It looks like the multipart limit was added in the Rails 4.2 version of Rack (https://github.com/rack/rack/commit/b0b5fb9467e6ed777d3eaf35afc81d758e308aab). The default is 128, which may be too little for your purposes, it was for mine. Setting the value to 0 in an initializer removes the limit and fixes the problem:

Rack::Utils.multipart_part_limit = 0

I would suggest tailoring the value until it fits your needs so your server doesn't run out of file handles. My app uses a massive form and setting it to 512 seemed to work for me.

Craig Knox
  • 916
  • 8
  • 8
14

You can also pass a Environment variable to the app, as you can see here(https://github.com/rack/rack/blob/8d21788798b521b97beb10047ebf593ddc0aaed2/lib/rack/utils.rb#L75).

RACK_MULTIPART_PART_LIMIT=0 rails server

gef
  • 7,025
  • 4
  • 41
  • 48
Scudelletti
  • 1,470
  • 17
  • 19
  • 3
    But you should set both `RACK_MULTIPART_PART_LIMIT` and `RACK_MULTIPART_LIMIT` because of the code remark _RACK_MULTIPART_LIMIT was introduced by mistake and it will be removed in 1.7.0_ – anka May 29 '15 at 08:54
  • Hey i m facing the same problem,Where i can place this line? – Jigar Bhatt Aug 24 '15 at 10:55
  • 1
    @JigarBhatt you can set this env variables on the line that you execute your script. For example: `RACK_MULTIPART_PART_LIMIT=0 ruby app.rb` or you can export you variable an then run your script. `export RACK_MULTIPART_PART_LIMIT=0 ` then `ruby app.rb` – Scudelletti Aug 30 '15 at 20:01
6

It looks like there is a bug in Rack 1.6 where all HTML input elements get counted as an open file in a multipart form. As others point out, you can change the limit to 0 to disable the feature, or bump the limit.

https://github.com/rack/rack/pull/814

John Naegle
  • 8,077
  • 3
  • 38
  • 47