anu
anu

Reputation: 1116

Rails 4.2: Internal Server Error with Maximum file multiparts in content reached

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.

Upvotes: 47

Views: 8178

Answers (4)

RoRFan
RoRFan

Reputation: 424

In Rails > 6 you will need to use multipart_total_part_limit instead of multipart_part_limit.

Rack::Utils.multipart_total_part_limit = 0

Source

Upvotes: 2

Scudelletti
Scudelletti

Reputation: 1504

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

Upvotes: 16

John Naegle
John Naegle

Reputation: 8257

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

Upvotes: 6

Craig Knox
Craig Knox

Reputation: 1036

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.

Upvotes: 75

Related Questions