Вот мой Продукты контроллер:Как импортировать 20 тысяч продукт из большого файла XML в приложении Rails
def import
if params[:xml_file]
file = params[:xml_file]
doc = Nokogiri::XML::Document.parse(file)
total_product = doc.xpath('//offer').take(params[:limit_number].to_i).length
Product.import(doc, params[:category_id], params[:stranger_category], params[:limit_number])
redirect_to products_path, notice: "#{total_product} Product added."
end
end
Вот мой продукт модели код:
def self.import(doc, category, cat_id, lit_num)
parsed_products = doc.xpath('//offer').take(lit_num.to_i)
parsed_products.each do |product|
next unless product.at_xpath('categoryId').text == cat_id
Product.create!(
price: product.at_xpath('price').text,
category_id: product.at_xpath('categoryId').text.gsub(cat_id, category),
remote_image_url: product.at_xpath('picture').text.strip,
brand_id: product.at_xpath('vendor').text,
title: product.at_xpath('name').text,
description: product.at_xpath('description').text
)
end
end
Это моя форма загрузки:
h2.text-center Import Products
= form_tag import_products_path, multipart: true do |f|
= file_field_tag :xml_file
br
= label_tag 'Mine Category'
= select_tag :category_id, options_for_select(Category.all.map {|c| [c.name, c.id ] })
br
= label_tag 'Stranger Category: '
= text_field_tag 'stranger_category'
br
= label_tag 'Limit: '
= text_field_tag "limit_number"
br
br
= submit_tag "Import"
Этот код работает для небольших файлов, но не для моего XML.
Я читал «[HOW TO] Parse large XML files in Ruby» и, как этот код, но не может получить тот же результат, что и мой код.
Это мой импорт выглядит следующим образом: http://prntscr.com/ar0hn8
Вот мой XML-файл: http://gist.github.com/saroar/0851b55e3c7add4c3deff0b7e306d004
Вместо использования Rails для его импорта вы изучили использование инструментов, которые поставляются с вашим DBM? Это будет намного быстрее. –
Добро пожаловать в переполнение стека. Пожалуйста, прочитайте «[mcve]». Не используйте ссылки на ваш XML. Вместо этого суммируйте его, уменьшив его до минимума, необходимого для демонстрации проблемы. Ссылки rot then break, а затем оставляют ваш вопрос бессмысленным для других в будущем. Мы не знаем, в чем проблема; Сбой вашего кода? Не может ли он импортировать все? Без этой информации нам остается задаться вопросом, как помочь, и любые ответы будут дикими догадками. –
Спасибо за ответ, мой код работает находкой, но когда файл xml большой, у меня нет памяти в моей macbook. У меня есть 8gb rem, но он разбивает мой сервер :(и что такое DBM? – Alif