En raison de problèmes de déploiement, j'ai arrêté de suivre schema.rb dans git. D'une manière ou d'une autre, j'ai bourré cela et quelque part en cours de route mon fichier schema.rb a disparu.
Existe-t-il un moyen de régénérer schema.rb à partir de la base de données ou des migrations? Je préférerais ne pas perdre les données existantes.
Si vous exécutez un rake -T
, il répertoriera toutes les tâches de rake possibles pour votre projet Rails. L'un d'eux est db: schema: dump , qui recréera le fichier schema.rb pour l'application Rails à partir de la base de données.
bundle exec rake db:schema:dump
Prudent,
rake db:schema:dump
videra le schéma de base de données actuel FROM de la base de données. Cela signifie que si vous apportez des modifications à vos migrations, elles ne seront ET NON PAS reflétées dans le fichier schema.rb, qui n'est pas ce que vous souhaitez pour la messagerie instantanée.
Si vous souhaitez recréer le schéma à partir des migrations, procédez comme suit:
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
rake db:schema:dump
Je pense que cela est toujours valable dans Rails 3 - il régénère le fichier schema.rb de la base de données.
Rails 5 Way:
Rails db:schema:dump
ou si vous rencontrez Gem :: LoadError then:
bundle exec Rails db:schema:dump
Remarque:
dans Rails 5, il est recommandé de générer/exécuter les tâches à l'aide de Rails
au lieu de rake
, ceci étant juste pour rappel, les tâches générées par Rails ont l'extension .rake
voir dans lib/tasks/myTask.rake
. ce qui signifie que ces tâches peuvent également être exécutées en ajoutant rake
au début.
Si vous régénérez schema.rb
localement, tout devrait bien se passer. Il contient simplement une représentation de la structure de vos tables de base de données. Les données elles-mêmes ne sont pas contenues dans ce fichier.
Pour régénérer votre fichier schema.rb
, exécutez:
bundle exec rake db:schema:dump
Ensuite, validez simplement le nouveau fichier schema.rb
et vous devriez être en bonne forme!
Directement à partir du fichier schema.rb lui-même:
Si vous devez créer la base de données d’application sur un autre système, vous devriez utiliser
db:schema:load
, ne pas exécuter toutes les migrations à partir de rien. Ce dernier est une approche imparfaite et non durable (plus vous accumulerez de migrations, plus il ralentira et plus les risques de problèmes sont grands).
Donc, ne faites PAS la suggestion de rake db:migrate
, qui a été suggérée dans - au moment de la rédaction de cet article - la réponse la plus basse.
J'ai également rencontré un problème similaire: mon ancien schéma ne rafraîchissait pas, même si je supprimais la migration.
Donc, ce que j'ai fait a été de supprimer toutes les tables existantes de la base de données et de les migrer à nouveau. L'exécution de la commande "db: schema: load" m'a donné un nouveau fichier schema.rb.
drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema