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





Короткий ответ: да
Длинный ответ: это зависит от того, как была настроена база данных и насколько она отличается от вашей текущей. Кроме того, поскольку я предполагаю, что идентификаторы генерируются динамически - если вы переходите из одной таблицы в другую, убедитесь, что все ваши внешние ключи обновлены правильно.
Напишите сценарий, который воссоздает всю БД из старых данных. Если вы разместили свою схему БД и новую схему БД, я буду рад помочь вам дальше :)
Я думаю, это потребует некоторой ручной работы.
Вы можете начать с запуска rake db:schema:dump, если в вашем проекте нет файла db/schema.rb. У вас, вероятно, уже есть файл db/schema.rb, если вы использовали миграции. Этот файл будет содержать рубиновое представление базы данных, которую вы настроили для разработки. Чтобы получить рубиновое представление другой базы данных, перейдите в RAILS_ENV к команде rake (например, RAILS_ENV=production rake db:schema:dump)
Затем вы можете использовать этот файл schema.rb в качестве отправной точки для создания новых миграций, воссоздающих существующие таблицы. При создании нового файла миграции убедитесь, что он назван таким образом, что он будет запущен до других ваших миграций.
привет, у меня аналогичная проблема, что вы имеете в виду, используя schema.rb в качестве отправной точки после rake db:schema:dump
Возьмите дамп и создайте (единственную) миграцию из него (в основном оберните все это в операторе миграции rails).
Именно эта проблема возникла при переносе PHP-приложения на rails. То, что мы сделали, похоже на сегодняшнее предложение. Сначала мы указали конфигурацию рельсов в текущей базе данных. Затем мы сделали 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. Мы написали миграции, чтобы правильно переименовывать столбцы идентификаторов, отношения внешних ключей, имена таблиц и т. д. Помните, что дамп схемы не поддерживает ограничения внешнего ключа и триггеры, если вы их используете.
работает! но вы должны изменить RAILS_ROOT на Rails.root в Rails 3.2
Схемы БД будут идентичны. Я написал миграции только для пары новых таблиц. Нужно ли мне писать миграции для каждой из старых таблиц.