Це своєрідне продовження цього питання: Чи може міграція Rails використовувати для перетворення даних?
Якщо я працюю на гілці, то коли цезнову інтегрована та випущена у виробництво, змінить схему бази даних досить різко. Який найкращий спосіб забезпечити перетворення всіх даних у виробництві у новий формат?
Простим прикладом може бути числовий стовпець, який ми хочемо змінити в текст і виконати певну роботу з перетворення даних. Потім ми хочемо скинути стару колонку.
Мені було рекомендовано не робити жодних маніпуляцій з даними під час міграцій, а створити для цього завдання граблів. Чи існує механізм забезпечення виконання завдань граблів для того, щоб поряд з міграціями?
Зараз єдине рішення, про яке я можу придумати, - це зробитиз’єднайте всі міграції, які перекидають стовпчики, що відпадають, у другу колекцію. Запустіть перший набір міграцій, який додає нові таблиці. Виконайте завдання граблі, а потім запустіть другий набір міграцій. Це не здається ідеальним рішенням для мене і могло легко піти не так.
Відповіді:
2 для відповіді № 1Міграції саме для цього матеріалу. Перетворення даних у базу даних для нової версії програми із зміною схеми або без неї має бути міграцією. Це гарантія того, що нові зміни відбудуться у виробництві до того, як нова версія додатка буде запущена.
Коли ви працюєте у філії, просто створітьнова міграція, яка створить новий файл з печаткою часу. Коли ви знову об'єднаєтесь у гілку випуску, файл буде просто скопійовано. Через часову позначку міграції (ймовірно) виконуватимуться у правильному порядку.
Якщо конверсія, яку ви робите, все ж буде періодично виконуватись, то вам слід скористатися завданням Rake.