Як Rails відстежує, які міграції виконуються для бази даних?


93

За даними довідки Rails: http://guides.rubyonrails.org/migrations.html

"Активні записи треків, міграції яких уже виконані, тому все, що вам потрібно зробити, - оновити джерело та запустити rake db: migrate."

Як насправді це робить ActiveRecord? Де зберігає дані Active Record?

Я підозрюю, що це може зберігатися в самій базі даних? У таблиці десь.

На своїй машині розвитку я провів усі міграції. Потім я скопіював виробничу базу даних за допомогою mysqldump. Потім я запустив "rake db: migrate: status", він правильно показує міграції, які потрібно виконати на виробничій базі даних.

Раніше я думав, що ActiveRecord відслідковує останній запуск міграції за допомогою часової позначки. Але я думаю, що це неправда, тому що ActiveRecord правильно виконує "старі" міграції, об'єднані в іншу гілку коду.

Чи міг би хтось, хто знає про це детально? Дякую


1
Я вважаю, що в базі даних є таблиця, яка веде облік.
Джек Франклін

Відповіді:


166

Rails створює таблицю у вашій базі даних, яку називають schema_migrationsдля відстеження того, які міграції пройшли.

Таблиця містить один стовпець, version. Коли Rails запускає міграцію, вона бере провідні цифри у імені файлу міграції та вставляє рядок для цієї "версії", вказуючи на те, що вона запущена. Якщо відкотити цю міграцію, Rails видалить відповідний рядок з schema_migrations.

Наприклад, запуск файлу міграції з іменем 20120620193144_create_users.rbвставить новий рядок з версією 20120620193144в schema_migrationsтаблицю.

Ви можете в будь-який момент ввести міграцію з більш ранніми версіями. Rails завжди буде виконувати будь-які нові міграції, для яких немає відповідного рядка schema_migrations. Провідні цифри не повинні бути міткою часу, ви можете викликати міграцію 001_blah.rb. Раніші версії Rails використовували цей формат і використовували послідовну нумерацію для новостворених міграцій. Пізніші версії перейшли на часові позначки, щоб запобігти незалежним генераціям міграцій з однаковим числом.


Особливо корисно, коли ви використовуєте суміш монтованого двигуна та фіктивного додатка
Донато
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.