Ruby on rails 在ruby内存中存储文件

Ruby on rails 在ruby内存中存储文件,ruby-on-rails,ruby,file,memory,temporary-files,Ruby On Rails,Ruby,File,Memory,Temporary Files,我正试图将一个文件分割成块,并将它们添加到ruby中的临时文件列表中,这样我就可以遍历该列表并将它们上传到分布式存储 我似乎遇到的问题是@fileList中的tempfiles被垃圾收集,列表中充满了关闭的文件 require_relative 'file_uploader' require 'fileutils' require 'tempfile' class FileSplitAlgorytham def initialize #@uploadFileUs = UploadT

我正试图将一个文件分割成块,并将它们添加到ruby中的临时文件列表中,这样我就可以遍历该列表并将它们上传到分布式存储

我似乎遇到的问题是
@fileList
中的tempfiles被垃圾收集,列表中充满了关闭的文件

require_relative 'file_uploader'
require 'fileutils'
require 'tempfile'
class FileSplitAlgorytham

  def initialize
    #@uploadFileUs = UploadToUs.new("blogs/1/articles/1/images/10/")
    #@uploadFileIreland = UploadToIreland.new("blogs/1/articles/1/images/10/")
    @chunksize = 1_073
    @fileList = []
  end

  attr_reader :fileList

  def splitFile(file_in)
    @filetype = File.extname(file_in)
    outfilenum = 1
    File.open(file_in,"r") do |fh_in|
      until fh_in.eof?
        Tempfile.open("#{outfilenum}#{@filetype}") do |fh_out|
          line = ""
          while fh_out.size <= (@chunksize -line.length) && !fh_in.eof?
            line = fh_in.readline
            fh_out << line
          end
          #upload files with modulo and counter?
           @fileList << fh_out
        end
      end

    end
  end
end
需要相对的“文件上传器”
需要“fileutils”
需要“临时文件”
类FileSplitAlgorytham
def初始化
#@uploadFileUs=UploadToUs.new(“blogs/1/articles/1/images/10/”)
#@uploadFileIreland=uploadToReland.new(“blogs/1/articles/1/images/10/”)
@chunksize=1_073
@文件列表=[]
结束
属性读取器:文件列表
def拆分文件(文件_in)
@filetype=File.extname(文件中的文件)
outfilenum=1
打开(文件在“r”中)do | fh|u在|
直到fh_in.eof?
Tempfile.open(“#{outfilenum}#{@filetype}”)do|fh_out|
line=“”

当fh_out.size时,您需要使用临时文件吗?如果你使用一个可以创建文件的托管平台,似乎可以避免gargabe收集问题。谢谢你的回复,我正在尝试为我的应用构建一个分布式文件存储解决方案。我希望将文件拆分,然后存储(创建)在两个Provider上这不是垃圾收集的问题。文件被关闭,因为您使用的是
.open
的块形式,它在完成块时关闭文件。参见Thank@NeilSlater,文件列表您需要使用临时文件吗?如果你使用一个可以创建文件的托管平台,似乎可以避免gargabe收集问题。谢谢你的回复,我正在尝试为我的应用构建一个分布式文件存储解决方案。我希望将文件拆分,然后存储(创建)在两个Provider上这不是垃圾收集的问题。文件被关闭,因为您使用的是
.open
的块形式,它在完成块时关闭文件。见“谢谢@NeilSlater,文件列表”