Mam następujący plik migracji db\migrate\20100905201547_create_blocks.rb
Jak mogę w szczególności przywrócić ten plik migracji?
Mam następujący plik migracji db\migrate\20100905201547_create_blocks.rb
Jak mogę w szczególności przywrócić ten plik migracji?
Odpowiedzi:
rake db:rollback STEP=1
Jest to sposób, aby to zrobić, jeśli migracja, którą chcesz przywrócić, jest ostatnią zastosowaną. Możesz zastąpić 1 dowolną liczbą migracji, do których chcesz wrócić.
Na przykład:
rake db:rollback STEP=5
Cofa również całą migrację, która nastąpiła później (4, 3, 2, a także 1).
Aby wycofać wszystkie migracje z powrotem do migracji docelowej (włącznie z nią), użyj: (To poprawione polecenie zostało dodane PO wszystkich komentarzach wskazujących błąd w oryginalnym poście)
rake db:migrate VERSION=20100905201547
Aby wycofać TYLKO JEDNĄ migrację specyficzną (POZA ZAMÓWIENIEM), użyj:
rake db:migrate:down VERSION=20100905201547
Zauważ, że NIE spowoduje to wycofania żadnych pośrednich migracji - tylko tej wymienionej na liście. Jeśli nie jest to zamierzone, możesz bezpiecznie uruchomić rake db:migrate
i ponownie uruchomi tylko ten jeden, pomijając wszystkie inne, które nie zostały wcześniej wycofane.
A jeśli kiedykolwiek chcesz migrować pojedynczą migrację poza kolejnością, istnieje również jej odwrotność db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. Zrobiłem to raz i oszalało, wycofując wszystko. Niemiły! To był Rails 4.2 - myślę, że można go teraz naprawić.
rake db:migrate:down VERSION=20100905201547
przywróci określony plik.
Aby znaleźć wersję wszystkich migracji, możesz użyć tego polecenia:
rake db:migrate:status
Lub po prostu przedrostek nazwy pliku migracji to wersja, którą musisz przywrócić.
Zobacz pozycję przewodnika Ruby on Rails dotyczącą migracji.
Aby cofnąć ostatnią migrację, możesz:
rake db:rollback
Jeśli chcesz przywrócić określoną migrację do wersji, wykonaj następujące czynności:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Na przykład jeśli wersja to 20141201122027, zrobisz:
rake db:migrate:down VERSION=20141201122027
wycofać tę konkretną migrację.
Możesz cofnąć migrację, używając rake db:rollback
różnych opcji. Składnia będzie inna w zależności od wymagań.
Jeśli chcesz cofnąć tylko ostatnią migrację, możesz użyć jednego z nich
rake db:rollback
lub
rake db:rollback STEP=1
Jeśli chcesz cofnąć liczbę migracji naraz, wystarczy przekazać argument:
rake db:rollback STEP=n
gdzie n
jest liczba migracji do wycofania, licząc od ostatniej migracji.
Jeśli chcesz przywrócić określoną migrację, powinieneś przekazać wersję migracji w następujący sposób:
rake db:migrate:down VERSION=xxxxx
gdzie xxxxx to numer wersji migracji.
rake db:migrate:down VERSION=your_migrations's_version_number_here
Wersja jest numerycznym prefiksem nazwy pliku migracji
Jak znaleźć wersję :
Twoje pliki migracji są przechowywane w twoim rails_root/db/migrate
katalogu. Znajdź odpowiedni plik, do którego chcesz przywrócić, i skopiuj numer prefiksu.
na przykład
nazwa pliku: 20140208031131_create_roles.rb
wtedy jest wersja20140208031131
rake db:migrate:status
Cofanie ostatniej migracji:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Cofanie ostatniej n
liczby migracji
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Cofanie określonej migracji
# 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
Aby cofnąć ostatnią migrację, możesz:
rake db:rollback
Jeśli chcesz przywrócić określoną migrację do wersji, wykonaj następujące czynności:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Jeśli wywołany został plik migracji, który chcesz wycofać db/migrate/20141201122027_create_some_table.rb
, to WERSJA dla tej migracji to 20141201122027
znacznik czasu, w którym migracja została utworzona, a polecenie cofnięcia migracji to:
rake db:migrate:down VERSION=20141201122027
Aby przywrócić wszystkie migracje do określonej wersji (np. 20181002222222
), Użyj:
rake db:migrate VERSION=20181002222222
(Pamiętaj, że to używa db:migrate
- nie db:migrate:down
tak jak w innych odpowiedziach na to pytanie).
Zakładając, że określona wersja migracji jest starsza niż bieżąca wersja, spowoduje to wycofanie wszystkich migracji do określonej wersji, ale bez uwzględnienia.
Na przykład, jeśli rake db:migrate:status
początkowo wyświetla się:
(... 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
Bieganie:
rake db:migrate VERSION=20181002222222
Spowoduje to:
(... 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
Odniesienie: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Możesz użyć funkcji Active Record do wycofania migracji przy użyciu revert
metody:
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
revert
Sposób przyjmuje również bloku instrukcji do odwrócenia. Może to być przydatne do przywrócenia wybranych części poprzednich migracji. Wyobraźmy sobie na przykład, że CreateBlock został popełniony, i później postanowiono, że do weryfikacji kodu pocztowego najlepiej będzie użyć walidacji Active Record, zamiast ograniczenia CHECK.
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
Tę samą migrację można również napisać bez użycia przywracania, ale wymagałoby to jeszcze kilku kroków: odwrócenie kolejności tworzenia_tabeli i odwracania, zamiana create_table na drop_table, a na koniec zastąpienie w dół i odwrotnie. Wszystko zostało załatwione przez cofnięcie.
Migracje zmieniają stan bazy danych za pomocą polecenia
$ bundle exec rake db:migrate
Możemy cofnąć pojedynczy krok migracji za pomocą
$ bundle exec rake db:rollback
Aby wrócić do samego początku, możemy użyć
$ bundle exec rake db:migrate VERSION=0
Jak można się domyślić, podstawienie dowolnej innej liczby na 0 powoduje migrację do tego numeru wersji, gdzie numery wersji pochodzą z listy migracji po kolei
Cóż, w Railsach 5 jest to dość łatwe rake db: migrate: status lub rails db: migrate: status
Został zmodyfikowany, aby obsługiwać oba w ten sam sposób. Następnie wybierz wersję, którą chcesz wycofać, a następnie uruchom rake db: migruj VERSION = 2013424230423
Upewnij się, że WERSJA składa się z wielkich liter
Jeśli masz problem z którymkolwiek etapem migracji lub utknąłeś na środku, po prostu przejdź do pliku migracji i skomentuj linie, które już zostały zmigrowane.
Mam nadzieję, że to pomaga
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file