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



согласно Rails doc:http://guides.rubyonrails.org/migrations.html



"активные записи треков, которые миграции уже были запущены, так что все, что вам нужно сделать, это обновить источник и запустить rake db:migrate."



Как ActiveRecord на самом деле это делает? Где Active Record хранит данные?



Я подозреваю, что это может храниться в самой базе данных? Где-то в столе.



на моей машине развития, я побежал все миграции. Затем я скопировал производственную базу данных с помощью mysqldump. Затем я запустил "rake db:migrate: status", он правильно показывает миграции, которые должны выполняться в производственной базе данных.



Я раньше думал, что ActiveRecord отслеживает последний запуск миграции, используя метку времени. Но я думаю, что это не так, потому что ActiveRecord правильно запускает "старые" миграции, объединенные из другой ветви кода.



может кто-то с внутренним знанием этого тщательно продумать?
Спасибо

689   1  

1 ответ:

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

таблица содержит один столбец, version. Когда Rails запускает миграцию, он берет начальные цифры в имени файла миграции и вставляет строку для этой "версии", указывая, что она была запущена. Если вы откатите эту миграцию, Rails удалит соответствующую строку из schema_migrations.

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

вы можете в любой момент ввести миграции с более ранними версиями. Rails всегда будет запускать любые новые миграции, для которых нет соответствующей строки в schema_migrations. Ведущие цифры не обязательно должны быть меткой времени, вы можете назвать свою миграцию 001_blah.rb. Более ранние версии Rails использовали этот формат и использовали последовательную нумерацию для вновь созданных миграций. Более поздние версии переключились на метки времени, чтобы помочь запретить нескольким разработчикам независимо создавать миграции с одинаковым числом пользователей.

Comments

    Ничего не найдено.