DevGang
Авторизоваться

Предотвращение миграции данных в миграции схем для Rails

Могли ли вы повторно запустить все миграции в проекте? Как часто вам приходилось исправлять их, пока производство было под огнем? Что вы можете сделать, чтобы предотвратить проблемы с миграцией и не тратить на неё много времени?

Решение

Не связывайтесь с миграцией схем и данных! Разделите эти проблемы. Для этого существует довольно распространенная стратегия:

  • Используйте миграции только для изменения схемы
  • Используйте разовые задания для загрузки/трансформации/импорта данных
  • Активно уничтожайте старые миграции и убирайте лишние задачи

Как вы можете воспользоваться им?

Как обычно, есть готовые решения с большим количеством помощников, чтобы всё это работало:

Но это можно сделать и без использования гемов, следуя простым правилам.

Алгоритм «сделай сам»

  1. Добавьте сервис для миграции данных.
  2.  (Необязательно) Если вы используете способ TDD, вам также следует добавить тесты для него. Убедитесь, что производственные данные не будут повреждены после миграции.
  3. Создайте одноразовую задачу rake с меткой времени. Временная метка упростит поиск несвязанных задач и их очистку.
  4. В задаче нужно запустить Сервис. Не нужно никакой логики. Просто запустите и выведите данные.
  5. При выходе: вызовите задачу rake.
  6. А после успешного выполнения расписание удалит задачу rake и весь избыточный код, который использовался только для этого Сервиса.

Подробнее о проблеме

Разработчики Ruby на Rails не часто повторяют миграции. Но миграции — это самый «скоропортящийся продукт» в проекте.

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

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

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

Прочие решения

Одна из идей, как сделать так, чтобы миграции работали как можно дольше, — не использовать прямые ссылки на модели, избегать вызовов методов и заменить запросы к активным записям на необработанные SQL-запросы.

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

Источник:

#Ruby
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу