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

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

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

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

Обновлено: меня интересует схема базы данных, а не ее содержимое.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 981
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Схемы БД будут идентичны. Я написал миграции только для пары новых таблиц. Нужно ли мне писать миграции для каждой из старых таблиц.

hectorsq 10.10.2008 09:05
Ответ принят как подходящий

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

Вы можете начать с запуска 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

hershey92 03.07.2012 21:03

Возьмите дамп и создайте (единственную) миграцию из него (в основном оберните все это в операторе миграции rails).

Michael Durrant 31.12.2012 18:28

Именно эта проблема возникла при переносе 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

sebast26 07.06.2013 17:43

Другие вопросы по теме