Нужно ли удалять миграцию после отката

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

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

В моем случае, что было бы наиболее разумно?

У меня был исходный файл переноса 20140731141350_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email
      t.string :password

      t.timestamps
    end
  end
end

К которому мне нужно было добавить столбец salt, поэтому я создал миграцию 20140804125449_add_salt_colum_to_users.rb

class AddSaltColumToUsers < ActiveRecord::Migration
  def change
    add_column :users, :salt, :string
  end
end

Но во время разработки я понял, что столбец salt не нужен, и выполнил

rake db:migrate:down VERSION=20140731141350

Теперь у меня остался неиспользуемый файл миграции 20140804125449_add_salt_colum_to_users.rb.

Удалить или нет?


person SteWoo    schedule 04.08.2014    source источник
comment
Если он не нужен, удалите его.   -  person mcfinnigan    schedule 04.08.2014


Ответы (3)


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

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

person BroiSatse    schedule 04.08.2014
comment
Для меня есть одно исключение, если вы не нажали эту миграцию - person Frederick Cheung; 04.08.2014
comment
Точно, если есть шанс, что миг может повлиять на кого-то, оставьте его там. Если нет, удалите его, это только усложнит ситуацию. - person Renra; 04.08.2014
comment
Вот о чем я думал. Я разрабатываю локально и ничего не сообщал команде, поэтому мои изменения ни на кого не повлияли, поэтому нужно ли создавать ДРУГУЮ миграцию, чтобы отменить миграцию, которая добавила столбец соли? Затем я в основном создал 2 миграции, чтобы вернуться к исходной миграции, которая кажется мне беспорядочной... - person SteWoo; 04.08.2014
comment
@SteWoo - еще одна причина сохранить их - это согласованность истории. Если вы когда-нибудь хотели посмотреть, как ваше приложение ведет себя в данный момент времени, вам может не повезти, и вы получите точку истории, где ваше приложение действительно имело это поле. Тогда файл миграции уже существовал, поэтому вы обновляете свою схему, а затем вам нужно повторно ее вернуть. Однако, если вы еще не нажали его, и это ваша последняя миграция, я не вижу причин его сохранять. Однако учтите, что это скорее исключение, чем правило. - person BroiSatse; 04.08.2014

Взгляните на этот сообщение в блоге о миграции рельсов. Как указано в этой статье:

Когда я запускаю новую среду, гораздо проще запустить rake db:schema:load. И миграции избыточны. Все эти данные находятся в файле схемы.

Поэтому я рекомендую вам удалить эту миграцию, если никакая другая миграция не зависит от этой.

person Dimitri    schedule 04.08.2014

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

person ilyabyar    schedule 04.08.2014