我有一个名为large.zip(约1GB)的大文件存储在公共(public)文件夹中。每当我尝试从本地主机 (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'
下载到 43619924 字节(约 400MB)时停止。我的电脑是 8GB RAM,我使用 ruby 1.9.3、rails 3.2.14 和 webbrick 作为网络服务器。我认为分配内存的大小有一些限制(400MB?)。那么有没有办法提高这个限制呢?或者如何解决这个问题?
编辑:我只是使用rails new 创建一个rails 应用程序,然后将large.zip 文件复制到公共(public)文件夹中。然后我在 Chrome 上打开链接 localhost:3000/large.zip 来下载它(再次)。
最佳答案
不要尝试直接通过 Rails 传输大文件,尤其是使用 WEBrick 作为服务器时。相反,使用 #send_file使用 Apache 或 Nginx 等 Web 服务器支持X-Sendfile。这使得 Web 服务器能够直接传输文件,而不会在 Rails 进程中消耗大量内存。
关于ruby-on-rails - 使用 Rails 在公共(public)文件夹中本地提供 1GB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420265/