Как создать миграции для устаревшей базы данных? - PullRequest
1 голос
/ 10 октября 2008

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

Мне бы хотелось, чтобы миграция воссоздала полную базу данных.

Каким шагам мне следует следовать?
Должен ли я создавать все миграции вручную?

РЕДАКТИРОВАТЬ: меня интересует схема базы данных, а не ее содержимое

Ответы [ 3 ]

7 голосов
/ 11 октября 2008

У нас была именно эта проблема, когда мы портировали приложение PHP на рельсы. То, что мы сделали, похоже на предложение сегодняшнего дня. Сначала мы указали конфигурацию рельсов на текущую базу данных. Затем мы сделали rake db: schema: dump и скопировали файл db / schema.rb в нечто вроде db / schema_base.rb. Затем вы выполняете первую миграцию, загружая эту схему. Например:

class CreateTables < ActiveRecord::Migration
  def self.up
    `cp #{Rails.root}/db/schema_base.rb #{Rails.root}/db/schema.rb`
    Rake::Task['db:schema:load'].invoke
  end

  def self.down
  end
end

Просто заставьте это быть первой миграцией, и вы будете на своем пути. Затем вы начинаете писать миграции, чтобы преобразовать базу данных, чтобы она была более совместимой с Rails. Мы написали миграции для правильного переименования столбцов идентификаторов, отношений внешних ключей, имен таблиц и т. Д.
Помните, что дамп схемы не поддерживает ограничения внешнего ключа и триггеры, если вы их используете.

3 голосов
/ 10 октября 2008

Я думаю, что это потребует ручной работы.

Вы можете начать с запуска rake db:schema:dump, если у вас нет файла db/schema.rb в вашем проекте. Возможно, у вас уже есть файл db/schema.rb, если вы использовали миграции. Этот файл будет содержать представление ruby ​​базы данных, которую вы настроили для разработки. Чтобы получить представление ruby ​​другой базы данных, передайте в RAILS_ENV команду rake (например, RAILS_ENV=production rake db:schema:dump)

Затем вы можете использовать этот файл schema.rb в качестве отправной точки для создания новых миграций, воссоздающих ранее существующие таблицы. При создании нового файла миграции убедитесь, что он назван так, что он будет запущен до других ваших миграций.

1 голос
/ 10 октября 2008

Краткий ответ: Да

Длинный ответ: Зависит от того, как была настроена база данных и насколько она отличается от текущей. Кроме того, поскольку я предполагаю, что идентификаторы генерируются динамически - если вы перемещаетесь из одной таблицы в другую, убедитесь, что все ваши внешние ключи обновлены правильно.

Напишите скрипт, воссоздающий всю БД из старых данных. Если вы опубликовали свою схему БД и вашу новую схему БД, я был бы рад помочь вам в дальнейшем:)

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