Próbuję przeprowadzić tylko jedną migrację z całej paczki w mojej aplikacji railsowej. Jak mogę to zrobić? Nie chcę uruchamiać żadnej migracji przed ani po niej. Dzięki.
ruby-on-rails
database
migration
rake
Zaraz
źródło
źródło
STEP=n
argument dodb:migrate
(gdzien
jest liczba migracji do uruchomienia, tak jak w przypadkudb:rollback
) - wtedy możesz zrobićrake db:migrate STEP=1
lubrake db:migrate STEP=2
itd.Odpowiedzi:
rake db:migrate:redo VERSION=xxxxxxx
, ale spowoduje to uruchomienie kroku,down
a następnieup
. Możesz to zrobić w połączeniu z tymczasowym komentowaniem kroku w dół.źródło
rake -T
.db:test:prepare
również nie pojawia się na tej liście. Boże, spóźniłem się na przyjęcie.rake db:migrate:up VERSION=my_version
może nic nie zrobić , ponieważ tabela schema_migrations nadal mówi, że została uruchomiona. W tej samej sytuacjirake db:migrate:redo VERSION=my_version
może się nie powieść, ponieważ nie może usunąć tabeli. W takim przypadkudown
tymczasowo zakomentuj metodę w migracji i uruchom ponownierake db:migrate:redo...
podobnie,
rake db:migrate:down
aby wyłączyć określoną migrację. Możesz uzyskać listę dostępnych zadań rake za pomocąrake -T
.źródło
VERSION
Wspomniano tutaj jest wartość całkowitą na początku każdego z plików migracji (co jest tylko znacznik czasu, kiedy został utworzony). Na przykładVERSION=20150720023630
.VERSION
jest to tylko zmienna środowiskowa, więc może być pierwsza w poleceniu lub nawet ustawiona przed poleceniem:VERSION=1234567890 rake db:migrate:up
Musiałem przeprowadzić pojedynczą migrację, która uległa zmianie i musiała zostać uruchomiona ponownie niezależnie od wszystkich innych migracji. Uruchom konsolę i zrób to:
>> require 'db/migrate/your_migrations.rb' => ["YourMigrations"] >> YourMigrations.up => etc... as the migration runs >> YourMigration.down
Bardziej przydatne może być zadanie rake itp.
źródło
change
, uruchomYourMigrations.migrate(:up)
zamiast tego (lub:down
też!)require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Przeprowadzi migrację (doda) określony skrypt migracji
rake db:migrate:down VERSION=version_no
Usunie określony skrypt migracji
źródło
spróbować.
źródło
VERSION
to tylko zmienna środowiskowa, więc może być pierwsza w poleceniu lub nawet ustawiona przed poleceniem:VERSION=20098252345 rake db:migrate
rake db:migrate:redo version='xxxx'
Pamiętaj, aby umieścić cudzysłów wokół xxxx, xxxx to sygnatura czasowa (lub identyfikator migracji) migracji.
Możesz sprawdzić sygnatury czasowe (identyfikator migracji) poprzednich migracji wykonanych za pomocą
rake db:migrate:status
źródło
Rozszerzanie odpowiedzi przez korch powyżej,
require
nie działało dla mnie, ale działałoload
. Konkretnie, dla pliku migracji:class ChangeMinQuantityToRaces < ActiveRecord::Migration def change change_column :races, :min_quantity, :integer, :default => 0 end end
w wpisywaniu konsoli
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb' > ChangeMinQuantityToRaces.new.change
pracował dla mnie.
> Race.new.min_quantity # => 0
Było to dla Ruby 1.9.3p484 (2013-11-22, wersja 43786) [x86_64-linux] i Rails 3.2.13.
źródło
Dodając do tego moje 2 ¢, ponieważ napotkałem ten sam problem:
Jeśli absolutnie chcesz ponownie przeprowadzić migrację bez tworzenia nowej, możesz wykonać następujące czynności:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
Railsy „zapomną”, że przeprowadziły migrację dla 20150105181157. Teraz, kiedy uruchomisz db: migrate, uruchomi się ponownie.
Prawie zawsze jest to jednak zły pomysł. Jedynym przypadkiem, w którym może to mieć sens, jest sytuacja, w której masz gałąź programistyczną, a nie przygotowałeś jeszcze migracji i chcesz dodać do niej kilka rzeczy w trakcie opracowywania. Ale nawet wtedy lepiej jest przeprowadzić migrację dwukierunkową, aby można było poprawnie wycofać i wielokrotnie ponawiać.
źródło
Musi istnieć sposób na uruchomienie klasy migracji za pośrednictwem konsoli. Nie mogę uzyskać rozpoznawalności kodu migracji.
Jednak, jak wskazują komentarze, preferowane jest uruchamianie migracji w kolejności. Posługiwać się:
rake db:migrate VERSION=##########
Skopiować i wkleić kod w migracji do skryptu / konsoli?
źródło
Mam metodę narzędziową, która bardzo ułatwia programowanie. Uważam, że pomaga mi to uniknąć tworzenia zbyt wielu migracji - zwykle modyfikuję migracje, dopóki nie zostaną wdrożone.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
źródło
Używam tej techniki w programowaniu, gdy zmieniam migrację w znacznej ilości i nie chcę migrować w dół tony i tracić żadnych danych po drodze (zwłaszcza gdy importuję starsze dane, co zajmuje dużo czasu, Nie chcę ponownie importować).
To jest w 100% hacking i zdecydowanie nie polecałbym tego na produkcji, ale wystarczy:
źródło