92 votes

Comment Rails assure-t-il le suivi des migrations effectuées pour une base de données?

Selon Rails doc: http://guides.rubyonrails.org/migrations.html

"Active Record pistes qui migrations ont déjà été exécuté de sorte que tous vous avez à faire est de mettre à jour votre source et lancer rake db:migrate."

Comment ActiveRecord de faire ça? D'où vient Active Record de stocker les données?

Je soupçonne que cela pourrait être stockées dans la base de données elle-même? Dans une table quelque part.

Sur ma machine de développement, j'ai couru tous les migrations. Puis j'ai copié la base de données de production sur l'utilisation de la commande mysqldump. Ensuite, j'ai couru "rake db:migrate:statut", il affiche correctement les migrations qui en ont besoin pour fonctionner sur la base de données de production.

J'ai l'habitude de penser que ActiveRecord conserve la trace de la dernière migration exécuter à l'aide de l'horodatage. Mais je pense que ce n'est pas vrai parce que ActiveRecord correctement le "vieux", migrations fusionné à partir d'un autre code de la branche.

Quelqu'un pourrait-il à l'intérieur de la connaissance de ce élaborer? Merci

162voto

meagar Points 85475

Rails crée une table dans votre base de données appelée schema_migrations pour suivre les migrations ont couru.

La table contient une colonne unique, version. Lorsque les Rails s'exécute d'une migration, il prend la tête de chiffres dans la migration du nom de fichier et insère une ligne pour que la "version", indiquant qu'il a été exécuté. Si vous roulez en arrière que la migration, les Rails de supprimer la ligne correspondante à partir d' schema_migrations.

Par exemple, l'exécution d'un fichier de migration nommé 20120620193144_create_users.rb insère une nouvelle ligne avec une version d' 20120620193144 dans la schema_migrations table.

Vous êtes libre, à tout moment pour introduire les migrations avec les versions antérieures. Rails de toujours exécuter toutes les nouvelles migrations pour lesquelles il n'y a pas une ligne correspondante en schema_migrations. Les premiers chiffres n'avez pas à être un timestamp, vous pouvez appeler votre migration 001_blah.rb. Les versions antérieures de Rails ce format, et utilisé la numérotation séquentielle pour les nouvelles migrations. Les versions ultérieures ont remplacé les horodatages pour aider à prévenir plusieurs développeurs de manière indépendante générer les migrations avec le même numéro.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X