2010-09-14 18 views
0

J'ai vu http://github.com/muness/migration_sql_generator, mais cela ne fonctionne pas correctement avec MySQL pour certaines opérations importantes. Existe-t-il un autre moyen de capturer le sql généré lors de la migration d'un rail?Comment pouvez-vous obtenir un script SQL de modifications à partir des migrations Rails (pour MySQL)?

La raison pour laquelle je demande est que je ne peux pas exécuter les migrations sur le serveur de production car il est maintenu par le support technique (et jamais touché par les développeurs) de mon entreprise. Les développeurs fournissent un fichier de guerre JRuby on Rails au support technique et ils le déploient via Tomcat. Mais convaincre le support technique d'installer JRuby et Rails juste pour lancer les migrations en production ne va certainement pas être facile. Nous voulons garder le déploiement très simple et avec le moins de dépendances possible.

Nous voulons simplement leur fournir un fichier war et un script sql avec des changements de db.

Répondre

0

En fait, j'ai fini par créer une tâche rake dont la méthode d'exécution sql de Activerecord a été patchée par un singe pour également sortir tout sql vers un fichier journal (log/database.log). Ainsi, la tâche pourrait être exécutée juste avant db:migrate comme ceci: rake db:log db:migrate. Après cela, vous pouvez extraire les instructions qui sont pertinentes et les placer dans un fichier db/sql_migrations/<migration name>.sql et faire en sorte que vos administrateurs de base de données s'exécutent quand ils sont prêts.

Heureusement, j'ai changé de travail et je n'ai plus à faire face à ce problème. :)

+0

Je suis dans la même situation que toi. Avez-vous déjà ouvert cette solution? – weibel

+0

Je ne l'ai pas fait. Et je n'ai pas l'ordinateur qui héberge ce code avec moi. Cependant, avec un peu de recherche, vous pouvez facilement faire la même chose. Je ne me souviens pas trop bien, mais j'ai peut-être regardé cette réponse à une autre question SO: http://stackoverflow.com/a/1629474/241367. Et j'ai peut-être regardé le lien qu'il a fourni: http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/. Je n'ai pas implémenté tout ce que l'article misuse.org contenait dans son extrait de code. YMMV, espérons que cela aide. – thekingoftruth

1

Vous pouvez utiliser une sorte d'outil pour générer une diff de deux bases de données. Il y a une question à ce sujet: here.

Si vous différez votre base de données de test avec votre base de données de développement juste après l'exécution de la migration qui serait probablement le moyen le plus facile. Il pourrait même être utile d'ajouter une tâche de rake pour le faire; obtenir cette tâche de rake pour dépendre de la migration, puis vous pouvez utiliser la nouvelle tâche au lieu de rake db:migrate pour générer un diff chaque fois que vous migrez.

+1

le diff devrait être fait sur la structure de table pour chaque table, et les données pour schema_migrations puisque vous voulez avoir les migrations dans cette table. – hellvinz