Ho il seguente file di migrazione db\migrate\20100905201547_create_blocks.rb
Come posso eseguire il rollback specifico di quel file di migrazione?
Ho il seguente file di migrazione db\migrate\20100905201547_create_blocks.rb
Come posso eseguire il rollback specifico di quel file di migrazione?
Risposte:
rake db:rollback STEP=1
È un modo per farlo, se la migrazione che si desidera ripristinare è l'ultima applicata. È possibile sostituire 1 per quante migrazioni si desidera tornare indietro.
Per esempio:
rake db:rollback STEP=5
Verrà inoltre eseguito il rollback di tutta la migrazione avvenuta in seguito (4, 3, 2 e anche 1).
Per ripristinare tutte le migrazioni su (e inclusa) una migrazione di destinazione, utilizzare: (Questo comando corretto è stato aggiunto DOPO tutti i commenti che evidenziano l'errore nel post originale)
rake db:migrate VERSION=20100905201547
Per eseguire il rollback SOLO DI UNA migrazione specifica (FUORI ORDINE) utilizzare:
rake db:migrate:down VERSION=20100905201547
Si noti che questo NON eseguirà il rollback di eventuali migrazioni intercessionate, ma solo quella elencata. Se non è quello che volevi, puoi correre in sicurezza rake db:migrate
e rieseguirà solo quello, saltando tutti gli altri che non sono stati precedentemente ripristinati.
E se vuoi mai migrare una singola migrazione fuori servizio, c'è anche il suo contrario db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. L'ho fatto una volta ed è impazzito, riportando tutto indietro. Non bello! Questo era Rails 4.2 - Immagino che possa essere risolto ormai.
rake db:migrate:down VERSION=20100905201547
eseguirà il rollback del file specifico.
Per trovare la versione di tutte le migrazioni, puoi usare questo comando:
rake db:migrate:status
Oppure, semplicemente il prefisso del nome file della migrazione è la versione che è necessario eseguire il rollback.
Vedi la voce della guida di Ruby on Rails sulle migrazioni.
Per ripristinare l'ultima migrazione è possibile eseguire:
rake db:rollback
Se si desidera eseguire il rollback di una migrazione specifica con una versione, è necessario:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Ad esempio, se la versione è 20141201122027, farai:
rake db:migrate:down VERSION=20141201122027
per ripristinare quella specifica migrazione.
È possibile eseguire il rollback della migrazione utilizzando rake db:rollback
con diverse opzioni. La sintassi sarà diversa in base alle proprie esigenze.
Se desideri eseguire il rollback solo dell'ultima migrazione, puoi utilizzare entrambi
rake db:rollback
o
rake db:rollback STEP=1
Se si desidera eseguire il rollback del numero di migrazioni contemporaneamente, è sufficiente passare un argomento:
rake db:rollback STEP=n
dove si n
trova il numero di migrazioni da ripristinare, contando dall'ultima migrazione.
Se si desidera eseguire il rollback a una migrazione specifica, è necessario passare la versione della migrazione nel modo seguente:
rake db:migrate:down VERSION=xxxxx
dove xxxxx è il numero di versione della migrazione.
rake db:migrate:down VERSION=your_migrations's_version_number_here
La versione è il prefisso numerico sul nome del file della migrazione
Come trovare la versione :
I tuoi file di migrazione sono memorizzati nella tua rails_root/db/migrate
directory. Trova il file appropriato su cui desideri eseguire il rollback e copia il numero di prefisso.
per esempio
nome file: 20140208031131_create_roles.rb
quindi la versione è20140208031131
rake db:migrate:status
Rollback dell'ultima migrazione:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Rollback dell'ultimo n
numero di migrazioni
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Rollback di una migrazione specifica
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
Per ripristinare l'ultima migrazione è possibile eseguire:
rake db:rollback
Se si desidera eseguire il rollback di una migrazione specifica con una versione, è necessario:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Se il file di migrazione che si desidera ripristinare è stato chiamato db/migrate/20141201122027_create_some_table.rb
, allora la VERSIONE per quella migrazione è 20141201122027
, che è il timestamp di quando è stata creata quella migrazione e il comando per ripristinare quella migrazione sarebbe:
rake db:migrate:down VERSION=20141201122027
Se si tratta di una migrazione reversibile e l'ultima che è stata eseguita, eseguire rake db:rollback
. E puoi sempre usare la versione. per esempio
il file di migrazione è 20140716084539_create_customer_stats.rb, quindi il comando di rollback sarà,
rake db:migrate:down VERSION=20140716084539
Per ripristinare tutte le migrazioni fino a una versione particolare (ad es. 20181002222222
), Utilizzare:
rake db:migrate VERSION=20181002222222
(Nota che questo usa db:migrate
- non db:migrate:down
come in altre risposte a questa domanda.)
Supponendo che la versione di migrazione specificata sia precedente alla versione corrente, verrà eseguito il rollback di tutte le migrazioni fino alla versione specificata, esclusa.
Ad esempio, se rake db:migrate:status
inizialmente viene visualizzato:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
In esecuzione:
rake db:migrate VERSION=20181002222222
Si tradurrà in:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
Riferimento: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Dalla guida di Rails
È possibile utilizzare la capacità di Active Record per eseguire il rollback delle migrazioni utilizzando il revert
metodo:
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
Il revert
metodo accetta anche un blocco di istruzioni per invertire. Ciò potrebbe essere utile per ripristinare parti selezionate delle migrazioni precedenti. Ad esempio, immaginiamo che CreateBlock sia sottoposto a commit e che in seguito venga deciso che sarebbe meglio usare le convalide Record attivo, al posto del vincolo CHECK, per verificare il codice postale.
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
La stessa migrazione avrebbe potuto anche essere scritta senza usare il ripristino, ma ciò avrebbe comportato alcuni passaggi: invertire l'ordine di create_table e reversible, sostituire create_table con drop_table e infine sostituire up con down e viceversa. Tutto questo è curato da Ripristino.
Le migrazioni cambiano lo stato del database usando il comando
$ bundle exec rake db:migrate
È possibile annullare un singolo passaggio di migrazione utilizzando
$ bundle exec rake db:rollback
Per tornare all'inizio, possiamo usare
$ bundle exec rake db:migrate VERSION=0
Come si può immaginare, la sostituzione di qualsiasi altro numero con 0 migra a quel numero di versione, da dove provengono i numeri di versione elencando le migrazioni in sequenza
Bene in rails 5 è abbastanza semplice rake db: migrate: status o rails db: migrate: status
È stato modificato per gestire entrambi allo stesso modo Quindi basta selezionare la versione che si desidera ripristinare e quindi eseguire rake db: migrate VERSION = 2013424230423
Assicurarsi che la VERSIONE sia tutta in maiuscolo
Se hai un problema con qualsiasi passaggio della migrazione o bloccato nel mezzo, vai semplicemente al file di migrazione e commenta le righe già migrate.
spero che aiuti
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file