J'essaie d'exécuter une seule migration sur tout un tas dans mon application rails. Comment puis-je faire ceci? Je ne souhaite exécuter aucune des migrations avant ou après. Merci.
94
J'essaie d'exécuter une seule migration sur tout un tas dans mon application rails. Comment puis-je faire ceci? Je ne souhaite exécuter aucune des migrations avant ou après. Merci.
STEP=n
argument àdb:migrate
(oùn
est le nombre de migrations à exécuter, comme il y en a pourdb:rollback
) - alors vous pouvez fairerake db:migrate STEP=1
ourake db:migrate STEP=2
, etc.Réponses:
rake db:migrate:redo VERSION=xxxxxxx
, mais cela exécuteradown
l'up
étape, puis l' étape. Vous pouvez le faire conjointement en commentant temporairement l'étape descendante.la source
rake -T
.db:test:prepare
n'apparaît pas non plus sur cette liste. Dieu, je suis en retard à la fête.rake db:migrate:up VERSION=my_version
peut ne rien faire , car la table schema_migrations indique toujours qu'elle a été exécutée. Dans la même situationrake db:migrate:redo VERSION=my_version
peut échouer car il ne peut pas supprimer la table. Dans ce cas, commentezdown
temporairement la méthode dans la migration et relancez-larake db:migrate:redo...
de même
rake db:migrate:down
pour réduire une migration spécifique. Vous pouvez obtenir une liste des tâches de râteau disponibles avecrake -T
.la source
VERSION
mentionné ici est la valeur entière au début de chacun de vos fichiers de migration (qui est juste l'horodatage de sa création). Par exempleVERSION=20150720023630
,.VERSION
est juste une variable d'environnement afin qu'elle puisse venir en premier dans la commande ou même définir avant la commande:VERSION=1234567890 rake db:migrate:up
J'ai dû exécuter une seule migration qui a changé et qui devait être réexécutée indépendamment de toutes les autres migrations. Lancez la console et procédez comme suit:
Plus utilement, cela pourrait être mis dans une tâche de râteau, etc.
la source
change
, exécutez à laYourMigrations.migrate(:up)
place (ou:down
aussi!)require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Migrera (ajoutera) un script de migration spécifique
rake db:migrate:down VERSION=version_no
Supprime un script de migration spécifique
la source
essayez cela.
la source
VERSION
est juste une variable d'environnement afin qu'elle puisse venir en premier dans la commande ou même être définie avant la commande:VERSION=20098252345 rake db:migrate
N'oubliez pas de mettre entre guillemets xxxx, xxxx est l'horodatage (ou ID de migration) de votre migration.
Vous pouvez vérifier les horodatages (ID de migration) pour les migrations précédentes que vous avez effectuées en utilisant
la source
L'élargissement de la réponse par korch ci-dessus
require
n'a pas fonctionné pour moi, maisload
a fonctionné. Pour être concret, pour le fichier de migration:dans la console en tapant
travaillé pour moi.
C'était pour ruby 1.9.3p484 (2013-11-22 révision 43786) [x86_64-linux] et Rails 3.2.13.
la source
Ajout de mes 2 ¢ à cela parce que j'ai rencontré le même problème:
Si vous souhaitez absolument réexécuter une migration sans en créer une nouvelle, vous pouvez effectuer les opérations suivantes:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
Et les rails «oublieront» qu'il a exécuté la migration pour 20150105181157. Maintenant, lorsque vous exécutez db: migrate, il l'exécutera à nouveau.
C'est presque toujours une mauvaise idée. Le seul cas où cela pourrait avoir du sens est si vous avez une branche de développement et que vous n'avez pas encore étoffé votre migration et que vous souhaitez y ajouter des éléments en développement. Mais même dans ce cas, il est préférable d'effectuer votre migration dans les deux sens afin de pouvoir correctement revenir en arrière et réessayer à plusieurs reprises.
la source
Il doit y avoir un moyen d'exécuter la classe de migration via la console. Je n'arrive pas à faire reconnaître le code des migrations.
Cependant, comme l'indiquent les commentaires, il est préférable d'exécuter les migrations dans l'ordre. Utilisation:
Copiez et collez votre code dans la migration vers le script / la console?
la source
J'ai une méthode utilitaire qui facilite le développement. Je trouve que cela m'aide à éviter de créer trop de migrations - normalement je modifie les migrations jusqu'à ce qu'elles aient été déployées.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
la source
J'utilise cette technique en développement lorsque je modifie une migration de manière significative, et je ne veux pas migrer d'une tonne et perdre des données en cours de route (surtout lorsque j'importe des données héritées qui prennent beaucoup de temps. Je ne veux pas avoir à réimporter à nouveau).
C'est 100% hackish et je ne recommanderais certainement pas de le faire en production, mais cela fera l'affaire:
la source