Почему я когда-либо хотел бы вернуться миграция?

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

Некоторые мысли:

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

Если миграция должна была перестать работать, она была бы также:

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

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

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

Таким образом, мне любопытно на предмет профессионалов, потому что я не могу думать ни о ком.

5
задан Stéphan Kochen 21 February 2010 в 15:27
поделиться

4 ответа

Ваша программа должна иметь такую структуру:

read number x 
repeat this x times  
  print '!'

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

-121--343739-

Я думаю, что униформа является лучшим решением для форм. Html хорошо и понятно, он имеет кучу хитроумных форм примеры решены очень красиво объявления он обращает внимание на удобство использования гораздо больше, чем другие рамки.

Другие, похоже, настаивают скорее на вертикальном типографском ритме, чем на здравом смысле и удобстве использования.:)

-121--3176776-

При разработке легко и быстро постепенно «улучшать» миграции с помощью автоматического метода down. Например,

  1. Создайте миграцию и выполните миграцию на нее
  2. Осознайте, что необходимо внести изменения
  3. Выполните миграцию на уровень, предшествующий новой миграции, с помощью db: migrate с версией
  4. Улучшите/исправьте миграцию
  5. Повторно запустите задачу миграции

Ваш метод создания снимков хорошо работает. Но рельсы включают тот же эффект автомагиозно, используя методы миграции «вниз». Работает со всеми БД, на вкус отлично

Добавлено:

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

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

4
ответ дан 14 December 2019 в 04:36
поделиться

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

0
ответ дан 14 December 2019 в 04:36
поделиться

Миграция "вниз", используемая для откатов БД, выполняется, поэтому каждое действие имеет равное и противоположное действие. Это снимает с разработчика ответственность за поддержку моментальных снимков базы данных и позволяет им использовать код для достижения тех же целей. Как сказал Ларри К., они хороши для таких ситуаций:

  • Добавьте столбец базы данных с именем «повторно отправлено», это логическое значение.
  • Владелец продукта говорит, что они могут повторно отправить запрос несколько раз, поэтому измените этот столбец на int

Теперь, если у вас 10 или 15 миграций, проще просто написать новый, вместо того, чтобы потерять все разработчики. данные в новых таблицах / столбцах, выполнив откат. Однако, если вы только что написали эту миграцию, она будет чище и менее загромождена откатом, изменением миграции и повторным запуском.

Другая чрезвычайно полезная функция откатов заключается в следующем:

  • Разработчик 1 имеет свою собственную Dev DB. Он пишет миграцию и запускает ее.
  • Разработчик 1 совершает миграцию в систему управления версиями
  • Разработчик 2 имеет собственную базу данных Dev. Она пишет миграцию и запускает ее.
  • Разработчик 2 обновляет систему управления версиями
  • Разработчик 2 пытается запустить миграции, но не может, поскольку ее локальная БД сообщает, что «последняя миграция уже была запущена», поскольку ее миграция (последняя) имеет технически уже был запущен. Теперь ей нужно выполнить откат, а затем выполнить db: migrate, чтобы получить все миграции в ее локальной БД.
2
ответ дан 14 December 2019 в 04:36
поделиться

Идея запуска миграции вниз на производстве приводит меня в ужас. Раньше, когда предпочтительным способом отката всех миграций был rake db:migrate VERSION=0, я постоянно делал это в разработке. Однако потом у меня появилась паранойя, что из-за того, что это закрепилось в мышечной памяти, я могу случайно напечатать это на рабочем сервере, когда я хотел просто выполнить миграцию.

Из-за этой паранойи я добавил следующее ко всем своим методам удаления.

  def self.down
    if Rails.env.production?
      raise ActiveRecord::IrreversibleMigration
    else
      drop_table :foo_bars
    end 
  end 

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

2
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: