【发布时间】:2018-12-26 11:05:07
【问题描述】:
我构建了一个 rake 任务以从 Awin 数据馈送中下载一个 zip,并通过 activerecord-import 将其导入我的产品模型。
require 'zip'
require 'httparty'
require 'active_record'
require 'activerecord-import'
namespace :affiliate_datafeed do
desc "Import products data from Awin"
task import_product_awin: :environment do
url = "https://productdata.awin.com"
dir = "db/affiliate_datafeed/awin.zip"
File.open(dir, "wb") do |f|
f.write HTTParty.get(url).body
end
zip_file = Zip::File.open(dir)
entry = zip_file.glob('*.csv').first
csv_text = entry.get_input_stream.read
products = []
CSV.parse(csv_text, :headers=>true).each do |row|
products << Product.new(row.to_h)
end
Product.import(products)
end
end
仅当产品不存在或 last_updated 字段中有新日期时如何更新产品数据库?刷新大型数据库的最佳方法是什么?
【问题讨论】:
-
你不能使用
on_duplicate_key方法之一吗? github.com/zdennis/activerecord-import#duplicate-key-update -
刷新大数据库是什么意思?模型还是模型和数据?您是否研究过
reload方法?我猜你会继续使用相同的数据源来更新数据,在这种情况下你也可以dropcreatemigrate和seed每次或.reload也应该工作。 -
这意味着当 Awin 刷新来自的 url 时,它会刷新我的数据库删除/更新/添加而不与未更改的交互。能否详细介绍一下reload方法?
标签: ruby database activerecord-import