У меня есть ситуация, когда мне нужно загружать данные из файлов CSV, которые меняются нечасто, и ежедневно обновлять данные из Интернета.Я приведу несколько полный пример того, как сделать первое.
Сначала у меня есть файл рейка в lib/tasks/update.rake
:
require 'update/from_csv_files.rb'
namespace :update do
task :csvfiles => :environment do
Dir.glob('db/static_data/*.csv') do |file|
Update::FromCsvFiles.load(file)
end
end
end
=> :environment
означает, что мыбудет иметь доступ к базе данных через обычные модели.
Тогда у меня есть код в файле lib/update/from_csv_files.rb
для выполнения фактической работы:
require 'csv'
module Update
module FromCsvFiles
def FromCsvFiles.load(file)
csv = CSV.open(file, 'r')
csv.each do |row|
id = row[0]
s = Statistic.find_by_id(id)
if (s.nil?)
s = Statistic.new
s.id= id
end
s.survey_area = row[1]
s.nr_of_space_men = row[2]
s.save
end
end
end
end
Тогда я могу просто запустить rake update:csvfiles
всякий раз, когда мои CSV-файлы меняются, чтобы загрузить новые данные.У меня также есть другая задача, которая аналогичным образом настроена на обновление моих ежедневных данных.
В вашем случае вы сможете написать некоторый код для загрузки ваших файлов YML или сделать свои вычисления напрямую.Для обработки ваших небольших исправлений вы можете создать универсальный метод для загрузки YML-файлов и вызывать его с конкретными файлами из задачи rake.Таким образом, вам нужно всего лишь включить файл YML и обновить файл rake новой задачей.Для обработки порядка выполнения вы можете создать задачу rake, которая вызывает другие задачи rake в соответствующем порядке.Сейчас я просто подбрасываю некоторые идеи, вы знаете лучше меня.