web-dev-qa-db-fra.com

Comment exécuter à nouveau une migration, sans supprimer toutes les migrations les plus récentes?

Je venais juste d'installer devise donc la table n'avait aucune donnée dessus sauf un utilisateur (moi).

Je refaisais la base de données une fois de plus, alors j'ai tout abandonné. J'ai fait Rails g scaffold pour générer 6 nouveaux modèles et contrôleurs et rake db:migrate

Dans mon /db/migrate répertoire J'ai le fichier de devise avec le nom de fichier 20130603211907_devise_create_users.rb

Voici le problème: si je le fais rake db:migrate:down VERSION=20130603211907 il supprimera toutes les nouvelles migrations.

Comment exécuter à nouveau une migration, sans supprimer toutes les migrations les plus récentes?

19
Kush

Si vous développez localement et que cela ne ferait pas de mal de supprimer toutes les données de vos modèles, vous pouvez simplement drop votre db puis create & migrate à partir de zéro:

Purger ou recréer une Ruby on Rails database

7
davegson

Il exécutera la descente puis la montée (Cette commande peut supprimer votre table!):

rake db:migrate:redo VERSION=xxxxxxx

Pour empêcher la suppression de votre table, vous pouvez le faire en conjonction avec commenter l'étape down temporairement.

50
Sachin R

Merci à tous pour l'aide. C'est ce qui a fonctionné pour moi:

ATTENTION: ces commandes vont supprimer toutes les données de votre base de données!

rake db:drop
rake db:create
rake db:migrate
7
Kush

Tu peux appeler rake db:migrate:redo VERSION=20130603211907 qui réexécutera la version spécifiée.

De plus, si vous avez des migrations qui ne doivent s'exécuter que lors de la montée de la chaîne de migration (par exemple, transformation des données, copie, etc.), vous pouvez spécifier un

def up 
  do_something
end

et def down (descendant), def change (dans les deux sens) respectivement.

Pour désactiver temporairement les migrations, renommez simplement, par exemple, la méthode def up à def up_ et il sera ignoré lors du traitement de la chaîne de migration.

6
woltob
rake db:migrate:up VERSION=20090408054532

cela fera migrer tous les fichiers jusqu'à VERSION = 20090408054532

checkout Exécuter un seul fichier de migration

3
bunty