115 votes

Comment supprimer les fichiers de migration dans Rails 3

Je voudrais supprimer/effacer un fichier de migration. Comment dois-je m'y prendre ? Je sais qu'il y a des questions similaires ici, mais à titre de mise à jour, y a-t-il un meilleur moyen que de faire script/destroy ?

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

152voto

Fábio Batista Points 11577

J'ai l'habitude :

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

Si votre application est déjà en production ou en phase de test, il est plus sûr d'écrire une autre migration qui détruira votre table ou vos colonnes.

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

2 votes

Le fait de supprimer la migration et d'exécuter ensuite un db:migrate effacerait-il la table qui a été créée ?

2 votes

Non, car Rails ne saurait pas comment le supprimer. Il doit appeler la fonction self.down méthode définie sur votre migration pour "déclasser" votre base de données.

0 votes

Je viens d'éditer ma réponse avec 2 bonnes références, regardez ça.

82voto

Gediminas Points 647

Une autre façon de supprimer la migration :

$ rails d migration SameMigrationNameAsUsedToGenerate

Utilisez-le avant rake db:migrate est exécuté car les changements dans la base de données resteront pour toujours :) - ou supprimer manuellement les changements dans la base de données

3 votes

"Si votre application est déjà en production ou en staging, il est plus sûr de simplement écrire une autre migration qui détruit votre table ou vos colonnes." Ainsi, les modifications ne restent pas éternellement dans la base de données

10 votes

Au fait, "d" veut dire "détruire".

24voto

fOx Points 11

Exécutez les commandes ci-dessous depuis le répertoire d'origine de l'application :

  1. rake db:migrate:down VERSION="20140311142212" (ici la version est l'horodatage précédé par rails quand la migration a été créée. Cette action rétablira les changements de DB dus à cette migration)

  2. Run "rails destroy migration migration_name" (migration_name est celui que vous avez choisi lors de la création de la migration. Supprimer " timestamp_ " du nom de votre fichier de migration pour l'obtenir)

0 votes

Rake destroy migration AddFileToTable rake aborted ! Ne sait pas comment construire la tâche 'destroy' (Voir la trace complète en exécutant la tâche avec --trace)

3 votes

Pour le numéro 2, la commande correcte est : rails d migration migration_name

2 votes

Merci pour l'astuce "remove timestamp_", c'est ce dont j'avais besoin.

10voto

Vicky Points 107

Vous pouvez également exécuter une migration descendante comme suit :

rake db:migrate:down VERSION=versionnumber

Reportez-vous à la Guide Ruby on Rails sur les migrations pour plus d'informations.

9voto

jyothi Points 51

Nous pouvons utiliser,

$ rails d migration table_name  

Ce qui supprimera la migration.

1 votes

Je pense que cela devrait être le nom du modèle plutôt que le nom de la table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X