Это хорошая идея, чтобы разрушить миграцию старых рельсов?
Приложение rails, которое я разрабатываю, в настоящее время имеет около 35 миграций до этого момента. Поскольку приложение начиналось как эксперимент, в миграциях имеется довольно много бессмысленного оттока, когда я переходил между различными идеями.
Существуют ли какие-либо недостатки для свертывания миграций 1-35 в одну миграцию? Я планировал сделать это, выполнив первую миграцию для схемы, как сейчас, и удалив все предыдущие миграции.
В настоящее время я единственный человек, работающий над этим проектом, если это имеет значение.
Ответы
Ответ 1
Если у вас есть код под контролем источника (у вас есть код под исходным контролем, не так ли?), то я бы сказал, что нет никакого реального вреда, если вы согласитесь, что изменения, связанные с откатом схемы, потребуют либо восстановление старых миграций или новых миграций. Просто убедитесь, что вы понимаете последствия и принимаете их, прежде чем устанавливать что-либо в камне.
Ваш текущий schema.rb может стать основой новой отдельной миграции, которая запустит новый набор.
Следует помнить, что если у вас есть операции манипуляции данными в ваших существующих миграциях, например, статические нагрузки данных и/или возможные последующие преобразования, то они должны быть обработаны где-то. Это то, что я несколько раз споткнулся...
Ответ 2
Я буду держать их вокруг. Не беспокойтесь о том, чтобы запускать множество миграций каждый раз, когда новый разработчик проверяет проект. Он всегда может запускать
rake db:schema:load
который намного быстрее, вместо запуска
rake db:migrate
Ответ 3
Иногда миграции могут использовать модели, которые больше не существуют или создают таблицы, а затем уничтожают их, тратя драгоценное процессорное время. Лучше всего скомпилировать его в db/schema.rb и заставить разработчиков запускать rake db:schema:load
Ответ 4
Если все ваши миграции делают, это изменить структуры таблиц, я бы не стал беспокоиться обо всем этом.
Имейте в виду, что некоторые миграции добавляют данные - у меня есть те, которые засевают базу данных с учетной записью администратора и другими фиксированными данными - и схема не даст вам этого.
Помните, что это плохая идея делать то, что я делаю с миграциями, поскольку я не использую миграции при развертывании. Таким образом, свертывающие миграции могут быть хорошей идеей на время, чтобы переместить эти миграции поселений данных для разделения задач рейка.
В обзоре - я повторяю уже сделанные точки. rake db:migrate VERSION -1
[Я обвиняю отвлекающий новый анимированный логотип, чтобы отвести взгляд от текста]
Ответ 5
Нет вреда, а свертывающиеся миграции - это хорошая практика и помогает повысить производительность при выполнении миграций. Теперь это часть схемы schema.rb:
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
Обратите внимание, что @mike-woodhouse говорит: "Будьте предупреждены, что если у вас есть операции манипуляции данными в ваших существующих миграциях, например, статические нагрузки данных и/или возможные последующие преобразования, тогда их нужно будет обрабатывать где-то".
Но вы ни в коем случае не должны делать ничего из своих миграций:)
- Чад
Ответ 6
Для тех, кто, как и я, нашел этот ответ в поисках способа вернуть reset приложение в исходное состояние, вот что делать:
rm db/migrations/*
rake db:drop
rake db:schmea:dump
Это полезно, если вы только что запустили приложение и решили пересоздать его с нуля, не потеряв все ваши файлы.