-1

Пожалуйста, помогите мне в решении этой ошибки.!! Неожиданная ошибка при обработке запроса: не удалось выделить память

Я получаю эту ошибку при загрузке записей из текстовых файлов в базу данных с использованием рубиновых скриптов.

Он просто отлично работает, если я использую небольшое количество записей для загрузки в базу данных. Но не получается, если имеется большое количество записей.

CSV.foreach(fileName) do |line| 
    completePath = line[0]             
    num_of_bps = line[1] 

    completePath = cluster_path+ '/' + completePath 
    inode = FileOrFolder.find_by_fullpath(completePath, :select=>"id") 

    metric_instance = MetricInstance.find(:first, :conditions=>["file_or_folder_id = ? AND dataset_id = ?", inode.id, dataset_id]) 
    add_entry(metric_instance.id, num_of_bps, num_of_bp_tests) 
end 

def self.add_entry(metaid, num_of_bps, num_of_bp_tests) 
    entry = Bp.new 
    entry.metric_instance_id = metaid 
    entry.num_of_bps = num_of_bps 
    entry.num_of_bp_tests = num_of_bp_tests 
    entry.save 
    return entry 
end 
+0

Вам нужно сузить это до образца образца разумного размера, который показывает ошибку и показывает ваш скрипт в вашем вопросе. В противном случае информации о том, кто может помочь, просто недостаточно. – lurker

+0

Я добавил код сценария, пожалуйста, просмотрите его ... Есть несколько файлов в том же порядке, которые загружаются в базу данных. – Vinay

ответ

0

Попробуйте что-то вроде этого:

File.open(fileName) do |csv| 
    csv.each_line do |line| 
    CSV.parse(line) do |values| 
     # Here you can do your manipulation 
    end 
    end 
end 

Этот путь медленнее, но он должен убедиться, что вы не получите из памяти.

+0

Спасибо! ... это проблема с объемом памяти, характерная для размера файла? если это так, в рубине есть способ проверить размер файла внутри скрипта и вызвать соответствующий метод? а также где мы можем проверить максимально допустимый размер файла? – Vinay

+0

У вас есть метод размера класса File: http://ruby-doc.org/core-2.0/File.html. Вы также можете проверить доступную физическую память http://stackoverflow.com/questions/4029391/how-do-you-find-the-physical-memory-free-on-the-machine-in-ruby. Максимальная память, которую могут выделять программы x86, составляет 2^32B = 4 ГБ, и это может быть проблемой, если вы используете 32-битный Ruby. И выделенная память в этом случае зависит от размера файла (потому что это большой файл), а другая память также используется другими переменными в куче. –

+0

@Ermin ...... Не могли бы вы ответить на этот вопрос ..... [link_to_question_2] (http://stackoverflow.com/questions/17149761/failed-to-allocate-memory-on-the-console- и-internal-server-error-on-the -rowse) – Vinay