web-dev-qa-db-fra.com

Comment supprimer des fichiers de migration dans Rails 3

Je voudrais supprimer/supprimer un fichier de migration. Comment pourrais-je m'y prendre? Je sais que des questions similaires se posent ici, mais à titre de mise à jour, existe-t-il un meilleur moyen que de faire un script/détruire?

Aussi, devrais-je faire un db:reset ou db:drop si je supprime/supprime une migration?

104
alvincrespo

D'habitude je:

  1. Effectuer un rake db:migrate VERSION=XXX sur tous les environnements, à la version antérieure à celle que je veux supprimer.
  2. Supprimez le fichier de migration manuellement.
  3. S'il y a des migrations en attente (c'est-à-dire si la migration que j'ai supprimée n'était pas la dernière), je viens d'effectuer une nouvelle rake db:migrate encore.

Si votre application est déjà en production ou en attente, il est plus prudent d'écrire une autre migration qui détruit votre table ou vos colonnes.

Une autre excellente référence pour les migrations est la suivante: http://guides.rubyonrails.org/migrations.html

139
Fábio Batista

Une autre façon de supprimer la migration:

$ Rails d migration SameMigrationNameAsUsedToGenerate

Utilisez-le avant que rake db:migrate Soit exécuté car les modifications dans la base de données resteront indéfiniment :) - ou supprimez les modifications manuellement

66
Gediminas

Exécutez les commandes ci-dessous à partir du répertoire de base de l'application:

  1. rake db:migrate:down VERSION="20140311142212" (ici la version est l'horodatage ajouté par Rails lors de la création de la migration. Cette action annule les modifications de la base de données dues à cette migration)

  2. Run "Rails destroy migration migration_name" _ (nom_migration est celui que vous avez choisi lors de la création de la migration. Supprimez "timestamp _" de votre nom de fichier de migration pour l'obtenir)

19
fOx

Nous pouvons également réduire la migration en tant que

rake db:migrate:down VERSION=versionnumber

Référez-vous Rubyonrailsguide

9
Vicky

On peut utiliser,

$ Rails d migration table_name  

Ce qui supprimera la migration.

8
Agnes

Parfois, je me trouvais en train de supprimer le fichier de migration, puis de supprimer l'entrée correspondante de la base de données schema_migrations. Ce n'est pas beau, mais ça marche.

2
frenesim

Regardez 4.1 Revenir en arrière

http://guides.rubyonrails.org/migrations.html

$ rake db: rollback

1
user1781626

Aucune de ces réponses ne correspond parfaitement au problème que j'avais car la migration que je voulais supprimer était manquante: j'avais créé et exécuté une migration dans une autre branche, qui a ensuite été supprimée. Le problème est lorsqu’une migration est exécutée, Rails ajoute la version dans un schema_migrations table dans la base de données. Ainsi, même s'il ne figure pas dans votre structure ou schéma de base de données, Rails le recherche. Vous pouvez révéler ces migrations orphelines en exécutant:

Rails db:migrate:status

Notez les versions des migrations manquantes et dirigez-vous vers la console de base de données:

Rails dbconsole

Maintenant, supprimez les versions de la table de migration manuellement:

delete from schema_migrations where version='<version>';

Vous devriez maintenant être bon.

0
stackPusher

Je viens d'avoir ce même problème:

  1. Rails d migration f - cela supprimait la migration avec le dernier horodatage
  2. Rails d migration f - Ceci a supprimé l'autre migration
  3. utilise le statut git pour vérifier qu'il ne se trouve plus sur les fichiers non suivis
  4. Rails g migration f

Cela a résolu le problème pour moi

0
Miguel Alatorre