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

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

刚刚升级到 Rails 4.2,在尝试编辑具有多个 has_many 对象的模型时,我在本地主机和生产环境中遇到内部服务器错误。这是我在 rails 控制台

上看到的消息
!! Unexpected error while processing request: Too many open files - Maximum file multiparts in content reached

请求甚至没有到达控制器,即,我在 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
......
......

有线索吗??使用 Ruby 2.1.5 升级到 2.2 没有运气。

Rails 4.2 版本的 Rack (https://github.com/rack/rack/commit/b0b5fb9467e6ed777d3eaf35afc81d758e308aab) 中似乎添加了多部分限制。默认值为 128,这对于您的用途来说可能太小了,但它适合我的用途。在初始化程序中将值设置为 0 可移除限制并修复问题:

Rack::Utils.multipart_part_limit = 0

我建议调整该值直到它满足您的需要,这样您的服务器就不会 运行 文件句柄不足。我的应用程序使用了一个巨大的表单,将其设置为 512 似乎对我有用。

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

RACK_MULTIPART_PART_LIMIT=0 rails server

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

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