Selon Rails doc: http://guides.rubyonrails.org/migrations.html
"Active Record suit les migrations qui ont déjà été exécutées. Il vous suffit donc de mettre à jour votre source et d'exécuter rake db: migrate."
Comment ActiveRecord fait-il cela? Où Active Record stocke-t-il les données?
Je soupçonne que cela pourrait être stocké dans la base de données elle-même? Dans une table quelque part.
Sur ma machine de développement, j'ai exécuté toutes les migrations. Ensuite, j'ai copié la base de données de production à l'aide de mysqldump. Ensuite, j'ai exécuté "rake db: migrate: status", il montre correctement les migrations qui doivent s'exécuter sur la base de données de production.
Je pensais qu'ActiveRecord garde une trace de la dernière migration effectuée à l'aide de l'horodatage. Mais je pense que ce n'est pas vrai car ActiveRecord exécute correctement les migrations "plus anciennes" fusionnées à partir d'une autre branche de code.
Quelqu'un pourrait-il avoir une connaissance intérieure de ce sujet? Merci
Rails crée une table dans votre base de données appelée schema_migrations
Pour garder une trace des migrations qui ont été exécutées.
Le tableau contient une seule colonne, version
. Lorsque Rails exécute une migration, il prend les premiers chiffres du nom de fichier de la migration et insère une ligne pour cette "version", indiquant qu'elle a été exécutée. Si vous annulez cette migration, Rails supprimera la ligne correspondante de schema_migrations
.
Par exemple, l'exécution d'un fichier de migration nommé 20120620193144_create_users.rb
Insérera une nouvelle ligne avec une version de 20120620193144
Dans la table schema_migrations
.
Vous êtes libre à tout moment d'introduire des migrations avec des versions antérieures. Rails exécutera toujours toutes les nouvelles migrations pour lesquelles il n'y a pas de ligne correspondante dans schema_migrations
. Les premiers chiffres ne doivent pas nécessairement être un horodatage, vous pouvez appeler votre migration 001_blah.rb
. Les versions antérieures de Rails utilisaient ce format et utilisaient une numérotation séquentielle pour les migrations nouvellement générées. Les versions ultérieures sont passées à des horodatages pour empêcher plusieurs développeurs de générer indépendamment des migrations avec le même numéro.