2008-10-10 2 views
1

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

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

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

EDIT: Я заинтересован в схеме базы данных не в содержимом базы данных

ответ

3

Я думаю, для этого потребуется некоторая ручная работа.

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

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

+0

привет, у меня есть аналогичная проблема, что вы имеете в виду, используя schema.rb в качестве отправной точки после `rake db: schema: dump` – hershey92 2012-07-03 17:03:14

+0

Возьмите дамп и создайте (одиночную) миграцию из него (в основном оберните весь вещь в заявлении миграции рельсов). – 2012-12-31 14:28:57

1

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

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

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

+0

Схемы БД будут идентичными. Я написал миграцию только для нескольких новых таблиц. Должен ли я писать миграции для каждой из старых таблиц. – hectorsq 2008-10-10 05:05:45

7

У нас была эта точная проблема, когда мы портировали приложение PHP на рельсы. То, что мы сделали, похоже на предложение tomtoday. Сначала мы указали конфигурацию рельсов на текущую базу данных. Затем мы сделали 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. Мы написали миграцию, чтобы правильно переименовать столбцы id, отношения внешних ключей, имена таблиц и т. Д.
Помните, что дамп схемы не поддерживает ограничения внешнего ключа и триггеры, если вы их используете.