【问题标题】:Rails 4.2: Internal Server Error with Maximum file multiparts in content reachedRails 4.2:内部服务器错误,内容达到最大文件多部分
【发布时间】:2015-01-05 04:20:28
【问题描述】:

刚刚升级到 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.0 和 Ruby 2.2.0。
  • Rack 1.6.4 包含对此的修复。

标签: ruby-on-rails-4


【解决方案1】:

Rails 4.2 版本的 Rack (https://github.com/rack/rack/commit/b0b5fb9467e6ed777d3eaf35afc81d758e308aab) 中似乎添加了多部分限制。默认值为 128,这对于您的目的来说可能太少了,它是给我的。在初始化程序中将值设置为 0 会消除限制并解决问题:

Rack::Utils.multipart_part_limit = 0

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

【讨论】:

  • 谢谢克雷格。如果有效,将测试并将您的答案标记为已接受。我确实有一个很长的表格。较短的表格可以正常工作。
  • 在我们看来,引入的补丁是计算每个表单元素打开一个文件,而不仅仅是文件。所以如果你有一个嵌套的表单,你很快就会用完“文件”。似乎是一个糟糕的补丁。
  • Rack 1.6.1 不包含此修复程序。看起来这将在 1.7 版本中代替:(
  • Rack 1.6.4 包含对此的修复。
  • @JigarBhatt 我把它放在config.ru中,供参考
【解决方案2】:

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

RACK_MULTIPART_PART_LIMIT=0 rails server

【讨论】:

  • 但是你应该同时设置RACK_MULTIPART_PART_LIMITRACK_MULTIPART_LIMIT,因为代码注释RACK_MULTIPART_LIMIT是错误引入的,它将在1.7.0中删除
  • 嘿,我也面临同样的问题,我可以把这条线放在哪里?
  • @JigarBhatt 您可以在执行脚本的行上设置此环境变量。例如:RACK_MULTIPART_PART_LIMIT=0 ruby app.rb 或者您可以导出变量然后运行您的脚本。 export RACK_MULTIPART_PART_LIMIT=0 然后ruby app.rb
【解决方案3】:

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

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

【讨论】:

  • 这已被合并到 1.6.4 中出现
猜你喜欢
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2019-04-10
相关资源
最近更新 更多