98 votes

Exécuter une seule migration Rake

Je cherche à exécuter une seule migration parmi tout un tas dans mon application Rails. Comment puis-je faire cela? Je ne veux pas exécuter les migrations avant ou après celle-ci. Merci.

2 votes

Ce serait une fonctionnalité pratique de Rails : ajouter un argument STEP=n à db:migrate (où n est le nombre de migrations à exécuter, tout comme il en existe pour db:rollback) - alors vous pourriez faire rake db:migrate STEP=1 ou rake db:migrate STEP=2, etc.

170voto

Ryan Bigg Points 64561

rake db:migrate:redo VERSION=xxxxxxx, mais cela exécutera d'abord l'étape down et ensuite l'étape up. Vous pourriez faire cela en commentant temporairement l'étape down.

0 votes

Hmm, blog.stonean.com/2007/12/18/rake-dbmigrateredo, ::redo ne semble pas prendre d'argument VERSION.

0 votes

Ça marche, je l'ai testé. Notez que l'article date de DEUX MILLE SEPT. Rails a beaucoup changé depuis ce temps-là.

0 votes

Alors pourquoi Stackoverflow afficherait des informations obsolètes? Si vous exécutez maintenant rake -T, il n'y a pas de tâche appelée db:migrate:redo

73voto

Shadwell Points 14102
rake db:migrate:up VERSION=1234567890

de même rake db:migrate:down pour descendre une migration spécifique. Vous pouvez obtenir une liste des tâches rake disponibles avec rake -T.

5 votes

La VERSION mentionnée ici est la valeur entière au début de chacun de vos fichiers de migration (qui est simplement le timestamp de sa création). Par exemple, VERSION=20150720023630.

3 votes

Les versions sont affichées de manière agréable avec rake db:migrate:status

0 votes

Remarquable, VERSION est simplement une variable d'environnement donc elle peut apparaître en premier dans la commande ou même être définie avant la commande : VERSION=1234567890 rake db:migrate:up

25voto

korch Points 1253

J'ai dû exécuter une seule migration qui a été modifiée et devait être ré-exécutée indépendamment de toutes les autres migrations. Lancez la console et faites ceci:

>> require 'db/migrate/vos_migrations.rb'
=> ["VosMigrations"]
>> VosMigrations.up
=> etc... pendant que la migration s'exécute
>> VosMigrations.down

De manière plus utile, cela pourrait être mis dans une tâche rake, etc.

6 votes

Cela a super bien fonctionné. Vous pouvez également simplement copier-coller le code de la migration dans la console pour définir la classe (et cela permet une manipulation manuelle si nécessaire, si vous avez fait une erreur sur Dev, par exemple). Si vous avez défini une migration réversible avec change, exécutez YourMigrations.migrate(:up) à la place (ou aussi :down)!

1 votes

Vous pourriez avoir besoin de require "#{Rails.root}/db/migrate/your_migrations.rb"

17voto

reshma Points 45

rake db:migrate:up VERSION=version_no

Permettra de migrer (ajouter) un script de migration spécifique

rake db:migrate:down VERSION=version_no

Supprimera un script de migration spécifique

12voto

Joseph Silvashy Points 14960
rake db:migrate VERSION=20098252345

essayez cela.

8 votes

Je pense que cela exécutera toutes les migrations jusqu'à celle que vous avez spécifiée.

1 votes

Fermer, mais qui exécute également toutes les migrations avant la migration spécifique.

6 votes

Je ne pense pas que vous devriez/vouloir exécuter seulement une migration sans tenir compte de celles qui la précèdent. Une migration est une représentation de la structure des bases de données telle qu'elle se rapporte au code à un moment donné, et donc les migrations précédentes sont nécessaires. Si vous voulez seulement exécuter une migration, il est probable que vous n'ayez pas écrit les opérations up/down appropriées pour maintenir les migrations fonctionnelles... c'est une mauvaise habitude de ne rédiger que vos migrations up.

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