使用Rails在公用文件夹中本地提供1GB文件

v4r*_*v4r 2 ruby ruby-on-rails

我有一个名为large.zip(大约1GB)的大文件存储在公用文件夹中.每当我尝试从localhost(localhost:3000/large.zip)下载它时,我收到以下错误消息

[2013-08-24 22:22:28] ERROR NoMemoryError: failed to allocate memory
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/handler/w
ebrick.rb:72:in `block in service'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
25:in `block in each'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
17:in `open'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
17:in `each'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/handler/w
ebrick.rb:71:in `service'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/server.rb:191:in `block in star
t_thread'
Run Code Online (Sandbox Code Playgroud)

下载停止在43619924字节(约400MB).我的PC是8GB RAM,我使用ruby 1.9.3,rails 3.2.14和webbrick作为webserver.我认为分配的内存大小有限(400MB?).那么有没有办法增加这个限制?或者如何解决这个问题?

编辑:我只使用rails new创建rails应用程序然后将large.zip文件复制到公用文件夹中.然后我在Chrome上打开链接localhost:3000/large.zip进行下载(再次).

Tod*_*obs 5

不要尝试直接通过Rails流式传输大型文件,特别是使用WEBrick作为服务器.相反,将#send_file与支持X-Sendfile的Apache或Nginx等Web服务器一起使用.这使Web服务器可以直接流式传输文件,而不会占用Rails进程中的大量内存.