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

Проблема с миграциями связана со временем жизни приложения, это означает, что когда ваше приложение становится более зрелым, вы добавляете все больше и больше моделей или редактируете уже существующие - это влияет на вашу папку `db / migrations`, которая становится все больше и больше.

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

Я хочу показать вам очень крутой гем, который поможет вам с бесконечной цепочкой файлов миграции - он называется [Squasher] (https://github.com/jalkoby/squasher).

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

Например

Это навсегда изменит вашу папку `db / migrations`, после входа в папку вы увидите только один файл, содержащий все миграции за предыдущий период времени.

использование

  • Добавьте gem "squasher" в свой Gemfile
  • создать базу данных под названием `squasher` - это будет временная база данных, в которую будут помещены все данные, которые были вставлены во время миграции. Squasher спросит вас позже, сохранять его на будущее или нет
  • Используйте `squasher DATE`, чтобы объединить все миграции до DATE

После всего процесса Squasher спросит вас:

Уверен, что после этой операции ваша папка миграции будет выглядеть так:

Раньше это выглядело так:

Все круто, ваш каталог db / migrations очень тонкий, но если вы использовали какие-то скрипты для создания, скажем, предопределенных ролей для пользователей, после слияния они исчезли, потому что Squasher объединил только операции с таблицами и столбцами и полностью игнорируемые скрипты или прямые вставки в определенные модели.
Но для этого есть решение: вы можете легко переместить все свои скрипты или записи, вставленные в файл `db / seed.rb`, который всегда выполняется после миграции при запуске команда `rails db: setup`. Теперь все должно быть на своих местах.

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

📝 Прочтите этот рассказ позже в Журнале.

🗞 Просыпайтесь каждое воскресное утро и слышите самые интересные истории, мнения и новости недели, ожидающие в вашем почтовом ящике: Получите примечательный информационный бюллетень›