web-dev-qa-db-fra.com

Rails: comment supprimer une migration en attente

Je suis actuellement le Ruby on Rails tutorial: http://guides.rubyonrails.org/getting_started.html .

J'essaie d'enregistrer des données dans la base de données. Cependant, lorsque je lance: Rails server J'obtiens l'erreur suivante:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate Rails_ENV=development

J'ai regardé les autres articles et quand je lance:

bin/rake db:migrate 

J'ai un rake aborted!

Après l'exécution:

rake db:abort_if_pending_migrations....

Je vois ça:

You have 1 pending migration:
20150805200129 CreateDatabases

SQLite3::SQLException: table "databases" already exists:

et il me dit juste d'exécuter rake db: migrate pour recommencer.

Il semble que cela existe déjà. Existe-t-il un moyen d'annuler la migration en attente?

20
Kenny Ellis

Votre migration a peut-être échoué à mi-chemin (elle a donc créé la table, mais ne s'est pas terminée).

Vous utilisez simplement l'environnement de développement, il est donc normal de simplement supprimer la base de données et de la reconstruire à partir de zéro:

rake db:drop
rake db:create
rake db:migrate
12
EugZol

Parfois, même la suppression d'une base de données de développement local n'est pas une bonne idée. Il existe de meilleures façons de supprimer/détruire une migration spécifique dans votre application Rails.

Vous pouvez utiliser Rails d migration commande pour détruire une migration particulière:

Rails d migration MigrationName

Pour annuler les modifications correspondant à une migration particulière, vous pouvez utiliser db:migrate:down méthode comme celle-ci:

rake db:migrate:down VERSION=XXX

Parfois, les choses pourraient devenir plus désordonnées et dans ces situations, une autre chose pratique est de jeter un oeil à la schema_migrations table dans votre base de données qui contient toutes les migrations avec leur version enregistrées dedans.

Vous pouvez supprimer une migration particulière de ce tableau comme ceci:

delete from schema_migrations WHERE version = VERSION;

si vous ne voulez plus que cette migration soit présente.

22
K M Rakibul Islam

Si vous êtes comme moi et maintenez votre structure de base de données en dehors de Rails, vous pouvez simplement supprimer le fichier de migration de db/migration. J'ai eu l'erreur dans la question de l'OP lorsque j'ai utilisé la commande Rails generate pour créer une classe de modèle, oubliant qu'elle crée également un fichier de migration.

N'utilisez pas cette méthode si vous comptez sur Rails pour maintenir la structure de votre base de données!

Je garde mon fichier de structure Rails à jour en le construisant à partir de la base de données en utilisant:

bundle exec rake db:structure:dump
2
curt