Am urmatoarele migrației fișier db\migra\20100905201547_create_blocks.rb
Cum pot specific rollback că migrația de fișiere?
rake db:rollback STEP=1
Este un mod de a face acest lucru, dacă migrarea doriți să rollback este ultima aplicate. Puteți înlocui 1 pentru toate acestea, multe migrații vrei să te întorci.
De exemplu:
rake db:rollback STEP=5
Va, de asemenea, rollback toate migrației, care s-a întâmplat mai târziu (4, 3, 2 și 1).
Să se rostogolească înapoi toate migrații înapoi la (și inclusiv) o țintă a migrației, utilizați: (Acest corectate comanda a fost adăugat DUPĂ toate comentariile subliniind eroarea în original post)
rake db:migrate VERSION=20100905201547
În scopul de a rollback DOAR UNUL de migrare specifice (DE ORDINE) utilizare:
rake db:migrate:down VERSION=20100905201547
Rețineți că acest lucru NU va rollback orice mijlocind migrații-numai una enumerate. Dacă acest lucru nu este ceea ce doriți, puteți rula în condiții de siguranță `rake db:migra și se va re-rula numai asta, sărind peste orice altele care nu au fost anterior laminate înapoi.
rake db:migrate:down VERSION=20100905201547
va rostogolească înapoi de fișiere specifice.
Pentru a găsi versiunea de toate migrații, puteți utiliza această comandă:
rake db:migrate:status
Sau, pur și simplu prefix de migrație's nume de fișier este versiunea de care aveți nevoie pentru a rollback.
A se vedea Ruby pe Șine de ghidare de intrare pe migrații.
Pentru a rollback ultima migrație puteți face:
rake db:rollback
Dacă doriți să rollback o migrare specifică cu o versiune ar trebui să faci:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
De exemplu, dacă este o versiune 20141201122027, va face:
rake db:migrate:down VERSION=20141201122027
pentru a rollback specifice de migrație.
Puteți rollback migrației prin utilizarea `rake db:rollback cu diferite opțiuni. Sintaxa va fi diferit în funcție de cerințele dumneavoastră.
Dacă doriți să rollback doar ultima migrație, atunci puteți folosi fie
rake db:rollback
sau
rake db:rollback STEP=1
Dacă doriți rollback serie de migrații la o dată, apoi pur și simplu trece un argument:
rake db:rollback STEP=n
unde " n " este numărul de migrații de la rollback, de numărare de la cele mai recente migrației.
Dacă doriți să rollback la o migrare specifică, atunci ar trebui să treacă la versiunea de migrație în următorul text:
rake db:migrate:down VERSION=xxxxx
unde xxxxx este numărul de versiune al migrației.
rake db:migrarea:VERSIUNE=your_migrations's_version_number_here
Versiunea este prefix numeric privind migrația's nume de fișier
Cum de a găsi versiunea:
Migrarea fișiere sunt stocate în rails_root/db/migra
director. Găsi fișierul corespunzător până la care doriți să rollback și copia numărul de prefix.
de exemplu
nume de fișier: 20140208031131_create_roles.rb
apoi, versiunea este 20140208031131
Rulare înapoi ultima migrație:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Rulare înapoi ultimul număr " n " de migrații
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Rulare înapoi o migrare specifică
# 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
Pentru a rollback ultima migrație puteți face:
rake db:rollback
Dacă doriți să rollback o migrare specifică cu o versiune ar trebui să faci:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Dacă migrarea fișierul pe care doriți să rollback a fost numit db/migra/20141201122027_create_some_table.rb, atunci VERSIUNE pentru că migrația este
20141201122027`, care este marca de timp de când migrația a fost creat, și porunca de a se rostogolească înapoi că migrația ar fi:
rake db:migrate:down VERSION=20141201122027
Dacă este un reversibile migrație și ultimul care a fost executat, apoi run rake db:rollback
. Și îl poți folosi întotdeauna versiune.
e.g
migrarea de fișier este 20140716084539_create_customer_stats.rb,deci comanda rollback va fi,
rake db:migrarea:VERSIUNE=20140716084539
De Șine Guide
Puteți utiliza Active Record's capacitatea de a rollback migrații folosind reveni
metoda:
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
A reveni
metoda acceptă, de asemenea, un bloc de instrucțiuni pentru a inversa. Acest lucru ar putea fi util pentru a reveni piese selectate anterior de migrații. De exemplu, să's imaginați-vă că CreateBlock este angajat și este mai târziu a decis că ar fi mai bine să utilizeze Active Record validări, în loc de a VERIFICA constrângere, pentru a verifica cod poștal.
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
Același migrația ar putea, de asemenea, au fost scrise fără a utiliza reveni, dar asta ar fi implicat o mai câțiva pași: inversarea ordinii de create_table și reversibile, înlocuirea create_table de drop_table, și în cele din urmă înlocuirea de jos, și vice-versa. Acest lucru este luat în grijă de către reveni.
Migrații schimba starea bazei de date folosind comanda
$ bundle exec rake db:migrate
Putem anula o singură etapă de migrare folosind
$ bundle exec rake db:rollback
Pentru a merge tot drumul înapoi la început, putem folosi
$ bundle exec rake db:migrate VERSION=0
Ca s-ar putea ghici, înlocuind orice alt număr pentru 0 migrează pentru că numărul de versiune, în cazul în care numerele de versiune venit de la listarea migrații secvențial
Să se rostogolească înapoi toate migrații până la o anumită versiune (de exemplu, 20181002222222
), utilizați:
rake db:migrate VERSION=20181002222222
(Rețineți că acest lucru foloseste db:migra... nu
db:migrarea:jos` ca și în alte răspunsuri la această întrebare.)
Presupunând că specificate de migrație versiunea este mai veche decât versiunea actuală, acest lucru se va rostogoli înapoi toate migrații, dar nu inclusiv, versiunea specificată.
De exemplu, dacă rake db:migrarea:starea
afișează inițial:
(... 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
Funcționare:
rake db:migrate VERSION=20181002222222
Va duce la:
(... 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
Referință: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Ei bine, în șine 5 l's destul de usor rake db:migrarea:starea sau șine db:migrarea:starea
Acesta a fost modificat pentru a se ocupa de ambele la fel Apoi alege doar ce Versiune doriți să se rostogolească înapoi și apoi executați rake db:migra VERSIUNE=2013424230423
Asigurați-vă că VERSIUNEA este majuscule
Dacă aveți o problemă cu orice pas de migrație sau blocat în mijlocul pur și simplu du-te la migrația de fișiere și comentați liniile care au migrat deja.
Sper că vă ajută