2009-11-26 5 views
0

En tant que point de terminaison API, je dois fournir un schéma de table avec un numéro de version afin que les développeurs mobiles avec lesquels je travaille puissent mettre en cache le schéma ça change encore. J'automatise ce processus, ce qui complique l'idée du «versioning». Au début, j'ai pensé que je pourrais utiliser le dernier numéro de migration comme version # mais il m'est apparu que les migrations Rails sont non séquentielles maintenant, donc cela signifierait que je devrais leur donner tous les numéros de migration et ils aurais besoin de décider s'il y avait une nouvelle migration présente en comparant les tableaux (peut-être est-ce la solution?)Rails/MySQL: connaître un numéro de version pour une table ou le schéma db entier

Je me demande s'il me manque quelque chose - s'il y a un autre numéro de version de schéma dans Rails en dehors de ceux stocké dans la table de migration, ou aussi s'il y avait un moyen de suivre cela via mysql. L'utilisation de la version de migration pourrait être une bonne idée.

Répondre

0

Si vous ne souhaitez pas afficher la liste complète des migrations manquantes, vous pouvez fournir la version de schéma actuelle pour une comparaison rapide, puis afficher la liste complète sur une deuxième requête.

Vous pouvez obtenir la liste des migrations en attente à l'aide de l'objet ActiveRecord::Migrator.

migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations 
migrations.each do |migration| 
    migration.version 
end 

Et pour la version de schéma actuelle.

schema = File.read("#{RAILS_ROOT}/db/schema.rb") 
version = ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, schema) 
puts version 
Questions connexes