Existe-t-il une commande rapide rake db: rollback pour toutes les migrations?
Bien que la réponse de @Orlandos soit correcte, rake db:reset
ne refait pas toutes les migrations et, comme il dit, charge les données du dernier schéma . Si vous voulez annuler toutes les migrations puis les refaire, vous devez utiliser:
rake db:migrate:reset #runs db:drop db:create db:migrate
Vous pouvez voir plus d’informations dans cet article: Différence entre rake db: migrate db: reset et db: schema: load
Si vous voulez vraiment annuler toutes les migrations et ne pas simplement amener la base de données à un état vierge ou au dernier schéma, vous devez exécuter:
rake db:migrate VERSION=0
En fait, cela annulera chaque migration et garantira que chaque migration est réversible.
Si vous publiez maintenant
rake db:migrate:status
vous verrez que toutes les migrations sont toujours là mais elles sont dans un état «bas» (non appliqué).
D'autres commandes impliquant un rake db:reset
ou un rake db:drop
(comme dans les réponses de @Orlando ou @Alex Falke) ne feront aucune restauration, c'est-à-dire qu'elles ne garantiront pas que chaque migration est réversible.
De plus, rake db:drop
ne peut pas être exécuté pendant que d'autres utilisateurs accèdent à la base de données, tandis que les restaurations peuvent être effectuées en direct (même si cela n'est généralement pas recommandé). Enfin, supprimer et recréer la base de données supprimera également la table des migrations de schéma: si quelqu'un exécute rake db:migrate:status
après que la base de données a été supprimée, il reçoit la réponse suivante: "La table des migrations de schéma n'existe pas encore" et n'a aucun indice. quelles migrations peuvent être appliquées (à moins qu'il ne le sache ou ne puisse les énumérer).
il suffit d'utiliser rake db:reset
pour supprimer votre base de données (comme pour l'annulation de toutes les migrations) et rétablir le dernier schéma.
UPDATE: une approche plus correcte utilisera rake db:migrate:reset
. Cela va supprimer la base de données, la recréer et exécuter toutes les migrations, au lieu de réinitialiser le dernier schéma.
Si un problème d'autorisation se pose (comme cela m'est arrivé), vous pourriez peut-être essayer de supprimer toutes les tables de la base de données, comme je l'ai fait avec rubymine (ouvrez simplement la fenêtre de l'outil de base de données, sélectionnez toutes les tables et cliquez avec le bouton droit de la souris -> supprimer), il devrait être similaire avec autres IDE. Certaines tables telles que sqlite_master et sqlite_sequence ont été commodément ignorées dans la liste déroulante.
Cela m'a permis de faire
Rails db:migrate
et tout a bien fonctionné. Bien sûr, vous perdez toutes les données!