Как Rails отслеживает, какие миграции выполнялись для базы данных?
согласно Rails doc:http://guides.rubyonrails.org/migrations.html
"активные записи треков, которые миграции уже были запущены, так что все, что вам нужно сделать, это обновить источник и запустить rake db:migrate."
Как ActiveRecord на самом деле это делает? Где Active Record хранит данные?
Я подозреваю, что это может храниться в самой базе данных? Где-то в столе.
на моей машине развития, я побежал все миграции. Затем я скопировал производственную базу данных с помощью mysqldump. Затем я запустил "rake db:migrate: status", он правильно показывает миграции, которые должны выполняться в производственной базе данных.
Я раньше думал, что ActiveRecord отслеживает последний запуск миграции, используя метку времени. Но я думаю, что это не так, потому что ActiveRecord правильно запускает "старые" миграции, объединенные из другой ветви кода.
может кто-то с внутренним знанием этого тщательно продумать?
Спасибо
1 ответ:
Rails создает таблицу в вашей базе данных под названием
schema_migrationsчтобы отслеживать, какие миграции были запущены.таблица содержит один столбец,
version. Когда Rails запускает миграцию, он берет начальные цифры в имени файла миграции и вставляет строку для этой "версии", указывая, что она была запущена. Если вы откатите эту миграцию, Rails удалит соответствующую строку изschema_migrations.например, запуск файла миграции с именем
20120620193144_create_users.rbвставить новая строка с версией20120620193144наschema_migrationsтаблица.вы можете в любой момент ввести миграции с более ранними версиями. Rails всегда будет запускать любые новые миграции, для которых нет соответствующей строки в
schema_migrations. Ведущие цифры не обязательно должны быть меткой времени, вы можете назвать свою миграцию001_blah.rb. Более ранние версии Rails использовали этот формат и использовали последовательную нумерацию для вновь созданных миграций. Более поздние версии переключились на метки времени, чтобы помочь запретить нескольким разработчикам независимо создавать миграции с одинаковым числом пользователей.
Comments