Миграция нескольких устаревших баз данных в одно приложение Rails - PullRequest
4 голосов
/ 13 марта 2011

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

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

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

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

Мои вопросы:

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

1 Ответ

1 голос
/ 13 марта 2011

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

Я думаю, вы должны рассмотреть второй пункт!

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

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

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

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

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

...