When I try to download a very large file (700MB) using send_file I get
a NoMemoryError (failed to allocate memory) error. It does look like I
am really running out of memory, because I am watching the memory grow
when this piece of code excutes. What typically happens on the client
side is that it sends only 256MB of the file to be downloaded. I am
stumped and not sure if this is a Windows, Mongrel, Rails, or ruby
issue. I thought send_file was supposed to stream a file in small
packets so file size wasn’t an issue, but this doesn’t seem to be the
case.
My set up is a Rails App. running on Windows Server 2003, Apache 2.2.3
w/ two Mongrel 0.3.13.3 services running.
Here is the controller code that is erring:
@document = Document.find(params[:id])
send_file(FILE_UPLOAD_ROOT + @document.url.strip)
Additionally, I have tried this:
@document = Document.find(params[:id])
fn = FILE_UPLOAD_ROOT + @document.url.strip
file_name = File.basename(fn.gsub(’\’, ‘/’)).gsub(/[^\w.-]/,’_’)
send_file(FILE_UPLOAD_ROOT + @document.url.strip, :streaming => true,
:type => ‘application/octet-stream’, :disposition => ‘attachment’,
:filename => file_name)
Any help would be appreciated!