Объединение данных из двух приложений Rails? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 2 приложения Rails с одинаковыми моделями, за исключением нескольких атрибутов.Теперь мне нужно объединить эти приложения, и я пытаюсь решить, как объединить их данные.Проблемы:

  • Конфликтующие идентификаторы.Пользователь из одного приложения будет иметь тот же идентификатор, что и другой пользователь в другом приложении.
  • Связанные записи.Как сохранить связь, когда идентификаторы нужно будет изменить?
  • Обработка атрибутов, которые не идентичны.Например, как вы вносите коррективы, когда в одной модели отсутствует атрибут?

Мне известны seed_dump и yaml_db , но я не уверен, что онихорошее решение для моей проблемы

1 Ответ

0 голосов
/ 04 октября 2018

Я столкнулся с подобной ситуацией некоторое время назад с приложением, разработанным для работы с несколькими базами данных.Чтобы объединить все данные в единую базу данных, я создал задачу rake, которая проходила бы через каждую запись и связь и воссоздала их в новой базе данных.

Задача имела два аргумента SOURCE и DESTINATIONи он будет работать как: rake db:merge SOURCE=some_database DESTINATION=new_database.Задача запускалась для каждой базы данных, которую мне нужно было объединить.

Внутри грабельной задачи идея была примерно такой:

namespace :db do
  task :merge => [:environment, :load_config] do |t, args|
  raise "Empty SOURCE provided" if not ENV["SOURCE"] or ENV["SOURCE"].empty?
  @source = ENV['SOURCE'].to_sym
  @destination = (ENV['RAILS_ENV'] || 'development').to_sym

  # for each model
  ActiveRecord::Base.establish_connection(@source)
  # obtain the records and its associations
  ActiveRecord::Base.establish_connection(@destination)
  # loop through each record and build all associated records
  # apply any necesary transformation to data
  # then build the record and fill it with the new associations
  # skip callbacks / validations if needed
  # then save

В некоторых случаях для отслеживания идентификаторов в ассоциациях, которые я использовалхэши, которые отслеживали исходный и новый идентификатор.

Я знаю, что сложности каждого приложения могут сделать этот процесс действительно сложным, но в моем случае эта идея оказалась очень полезной в качестве отправной точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...