2013-01-17 3 views
2

La situation que j'ai est que nous avons plusieurs schémas sur SQL Server que nous devons être en mesure de faire schéma: vidage et migrations contre. Un schéma est pour notre nouvelle application Rails, l'autre schéma est pour un système hérité dont nous dépendons. Lors de l'exécution de rake db: schema: dump, nos nouvelles tables de schéma sont correctement créées dans le fichier schema.rb. Les tables de schéma héritées ne se retrouvent pas dans schema.rb. Je me demande comment les autres traitent de cette question. Une autre considération que j'ai donnée à ceci est que nos tables de schéma héritées sont assez statiques serait de les ajouter à un fichier séparé une fois, puis créer un crochet avant pour rake db: schema: load qui exécuterait ce fichier avant de le schéma.rb. Existe-t-il un hook avant pour rake db: schema: load; si oui, qu'est-ce que c'est?Rails rake db: schéma: vidage sur la base de données SQL Server avec plusieurs schémas

Répondre

1

Voici comment j'ai résolu ce problème.

J'ai ajouté un hook avant avant le chargement de schéma et le vidage de schéma dans hooks.rake comme décrit ci-dessous.

namespace :project do 
    namespace :db do 
    task :before_schema_load => :environment do 
     add_tables 
    end 

    task :before_schema_dump => :environment do 
     add_ignored_tables 
    end 
    end 
end 

Rake::Task['db:schema:dump'].enhance(['project:db:before_schema_dump']) 
Rake::Task['db:schema:load'].enhance(['project:db:before_schema_load']) 

Dans la fonctionnalité add_tables j'ai créé manuellement ce qui est essentiellement une schema.rb statique équivalente pour mes tableaux anciens puisque ceux-ci changeront rarement (peut-être jamais).

Dans les tables add_ignored_tables, j'ai ajouté des tables au tableau ActiveRecord :: SchemaDumper.ignore_tables pour indiquer les tables qui ne font pas partie de mon schéma que je ne veux pas transférer dans schema.rb. Dans mon cas, c'est tout ce qui n'est pas sous le schéma de mon application actuelle. Dans ma situation, tout ce que je veux en dehors du schéma de mon application est spécifié dans add_tables, donc ces tables ne devraient pas se retrouver dans le schéma.rb.

Questions connexes