Перенос нескольких устаревших баз данных в одно приложение Rails

У меня есть несколько (старых) Drupal-сайтов, которые нужно заменить одним новым приложением Rails. Этот новый сайт должен содержать весь старый Drupal-контент. Этот старый Drupal-контент частично поврежден (из-за почти 7 лет безуспешных обновлений, прекращенных модулей и т. Д.). Тот факт, что это Drupal, вряд ли имеет значение, просто тот факт, что он вызывает некоторые несоответствия, странное именование и плохо нормализованные таблицы.

Контент, который необходимо импортировать в приложение Rails, прост: контент (записи в блоге), прикрепленные файлы (изображения) и комментарии. У меня есть такая роскошь, что две базы данных являются «устаревшими» (не в производстве), а еще две находятся в производстве, но могут отключиться / заблокироваться на некоторое время (часы, дни). Таким образом, миграции не нужно оптимизировать по скорости или полностью сохранять (что означает: я могу позволить себе потерять опубликованный комментарий во время выполнения миграции)

Приложение Rails (3) в основном готово и использует только соглашения об активных записях.

Из-за ограничений (сломанная, несогласованная база данных, несколько баз данных, нуждающихся в слиянии) я предпочитаю писать миграции для этого, вместо того, чтобы подключать мое новое приложение Rails к некрасивой, несовместимой устаревшей базе данных.

Мои вопросы:

  • Существуют ли какие-либо среды, жемчужины или инструменты, которые упрощают импорт в Rails: например, что-то, что позволяет простое сопоставление старого и нового в некотором DSL.
  • Или проще написать мои миграции полностью на SQL: SQL-запросы, которые превратят старые данные в структуру, подходящую для приложения Rails? Миграция осуществляется с MySQL-> MySQL.
  • Или мне просто подключить Activerecord к старым базам данных, перебрать каждую строку / результат и запустить Object.save! в моем приложении рельсов?

person berkes    schedule 13.03.2011    source источник


Ответы (1)


Интересный случай, я столкнулся с той же проблемой в моем текущем проекте.

Думаю, вам стоит учесть второй момент!

Или проще написать мои миграции полностью на SQL: SQL-запросы, которые превратят старые данные в структуру, подходящую для приложения Rails? Миграция осуществляется с MySQL-> MySQL.

Напишите миграции SQL для импорта данных из вашей старой базы данных в новую, а затем работайте с новой схемой! Я полагаю, у вас есть SQL-файл дампа со списком запросов INSERT для каждой старой базы данных.

Таким образом, стратегия для этого может быть следующей:

  1. Создайте одно представление SQL для каждой таблицы старой схемы базы данных из вашей новой схемы.
  2. Выполните эти INSERT против своих взглядов.

Сначала я собирался рассказать вам о геме legacy_data, который в основном генерирует весь слой модели с соответствующими проверки / ассоциации, но это бесполезно в вашем случае, учитывая, что у вас уже есть все необходимые модели, настроенные в вашем приложении Rails.

person Amokrane Chentir    schedule 13.03.2011