使用Carrierwave将大文件上载到Rails应用程序时出现内存分配错误

时间:2016-01-20 12:55:08

标签: ruby-on-rails ruby mongodb mongoid carrierwave

我查看了以下问题,但它没有给我一个满意的解决方案:

getting my rails app to accept large files

我正在使用Rails 4.2,Ruby 2.1和Mongodb 3.2,Carrierwave 0.10.0和Mongoid 5.0.2。我能够将相对较小的文件(<20mb)成功上传到数据库。但是当我尝试上传一个大文件(大约500mb)时,我在控制台中收到以下错误:

  

在2016-01-20 14:24:12 +0200为:: 1开始获取“/ invoice_collections / new”   由InvoiceCollectionsController处理#new为HTML    在布局/应用程序中呈现invoice_collections / new.html.erb(28.0ms)   在129ms完成200 OK(浏览次数:128.0ms | ActiveRecord:0.0ms)   [2016-01-20 14:25:30] 错误NoMemoryError:无法分配内存   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httprequest.rb:254:在'block&gt; in body'中   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httprequest.rb:479:在'call'中   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httprequest.rb:479:in&gt;`read_body'   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httprequest.rb:255:在'body'中   C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:62:in'service'   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:138:in>'service'   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:94:in'run'   C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/webrick/server.rb:295:'block in&gt; start_thread'

虽然我在控制台中看到这一点,但我看到的是纯白页而不是我应该看到的视图。

其中RailsInstaller是我的Ruby和Rails安装所在的位置。它在这里下载:

http://railsinstaller.org/en

我尝试在尝试这样做的同时尽量减少我的电脑上的内存使用但这没有帮助。我尝试重新安装rails和ruby但没有成功。我已经尝试在云端9上运行应用程序,而不是从我的机器运行,它已经运行,我的机器有比云9更多的内存。然而,我需要使用我的机器进行测试的原因是我必须对上传的文件执行一些相当大的操作。

我的机器上出现此错误的原因是什么?我该怎么做才能解决它?

更新 我试图在具有32 GB RAM的PC上运行该应用程序。仍然给出完全相同的错误,所以我不认为这与我的PC内存有关。

1 个答案:

答案 0 :(得分:0)

所以似乎问题出在webrick身上。我不确定究竟是什么问题,但我使用Thin代替webrick。