Rails 4.2:内部服务器错误,达到内容中的最大文件多部分

anu*_*anu 40 ruby-on-rails-4

刚刚升级到Rails 4.2,当我尝试编辑具有多个has_many对象的模型时,我在localhost和生产中获得内部服务器错误.这是我在rails控制台上看到的消息

!! Unexpected error while processing request: Too many open files - Maximum file multiparts in content reached
Run Code Online (Sandbox Code Playgroud)

该请求甚至没有到达控制器,即,我没有在rails的控制台中看到通常的以下行

Started GET "/feeds/3/edit" for 127.0.0.1 at 2015-01-04 20:07:19 -0800
Processing by FeedsController#edit as HTML
......
......
Run Code Online (Sandbox Code Playgroud)

任何线索?使用Ruby 2.1.5升级到2.2没有运气.

Cra*_*nox 67

看起来在Rails 4.2版本的Rack中添加了多部分限制(https://github.com/rack/rack/commit/b0b5fb9467e6ed777d3eaf35afc81d758e308aab).默认值为128,对于您的目的而言可能太少,这是我的.在初始化程序中将值设置为0将删除限制并修复问题:

Rack::Utils.multipart_part_limit = 0
Run Code Online (Sandbox Code Playgroud)

我建议定制值,直到它符合您的需要,这样您的服务器就不会用完文件句柄.我的应用程序使用了一个庞大的表单,将其设置为512似乎对我有用.

  • Rack 1.6.4包含一个修复程序. (4认同)
  • 它看起来像我们引入的补丁是计算每个表单元素一个打开的文件,而不仅仅是文件.因此,如果您有嵌套表单,则很快就会用完"文件".看起来像一个糟糕的补丁. (3认同)
  • 谢谢克雷格.如果有效,将测试并标记您的答案.我有一个很长的形式.较短的形式工作正常. (2认同)
  • @JigarBhatt我把它放在config.ru中,以供参考 (2认同)

Scu*_*tti 14

您也可以将环境变量传递给应用程序,如此处所示(https://github.com/rack/rack/blob/8d21788798b521b97beb10047ebf593ddc0aaed2/lib/rack/utils.rb#L75).

RACK_MULTIPART_PART_LIMIT=0 rails server

  • 但是你应该设置'RACK_MULTIPART_PART_LIMIT`和`RACK_MULTIPART_LIMIT`,因为错误地引入了代码备注_RACK_MULTIPART_LIMIT,它将在1.7.0_中删除 (3认同)

Joh*_*gle 6

看起来Rack 1.6中存在一个错误,其中所有HTML输入元素都被计为多部分形式的打开文件.正如其他人指出的那样,您可以将限制更改为0以禁用该功能,或者突破限制.

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