Próbuję uruchomić tylko jedną migrację z całej garści w mojej aplikacji rails. Jak mogę to zrobić? Nie chcę uruchamiać żadnej z migracji przed ani po niej. Dzięki.Rake tylko jedna migracja
Odpowiedz
rake db:migrate:redo VERSION=xxxxxxx
, ale zostanie uruchomiony krok down
, a następnie up
. Możesz to zrobić w połączeniu z chwilowym komentowaniem kroku w dół.
Hmm, http://blog.stonean.com/2007/12/18/rake-dbmigrateredo/, :: redo nie wydaje się przyjmować argumentu VERSION. –
Działa, przetestowałem to. Należy zauważyć, że artykuł pochodzi z DWÓCH TYSIĄC I SIEDEM. Railsy bardzo się zmieniają w tym czasie. –
Dlaczego więc Stackoverflow powinien wyświetlać nieaktualne informacje? Jeśli teraz uruchomisz 'rake-T', nie ma zadania o nazwie' db: migrate: redo' –
rake db:migrate VERSION=20098252345
wypróbuj.
Myślę, że spowoduje to przeprowadzenie migracji do wybranej przez Ciebie. –
zamknij, ale to także uruchamia wszelkie migracje przed określoną migracją. – Anon
Nie sądzę, że powinieneś/chcesz uruchamiać tylko jedną migrację bez uwzględnienia wcześniejszych. Migracja jest reprezentacją struktury baz danych, ponieważ odnosi się do kodu w danym momencie, a zatem migracje przed nim są konieczne. Jeśli chcesz tylko uruchomić _na_ migrację, prawdopodobnie nie zapisałeś odpowiednich operacji w górę/w dół, aby migracja była funkcjonalna ... to jest zły nawyk, aby pisać swoje migracje. –
Musi być sposób na uruchomienie klasy migracji za pośrednictwem konsoli. Nie wydaje mi się, żeby kod migracji był rozpoznawalny.
Jednak, jak zaznaczają komentarze, preferowane jest przeprowadzenie migracji w kolejności. Użyj:
rake db:migrate VERSION=##########
Skopiuj i wklej swój kod w migracji do skryptu/konsoli?
rake db:migrate:up VERSION=1234567890
podobnie rake db:migrate:down
, aby wykonać konkretną migrację w dół. Możesz uzyskać listę dostępnych rake zadań z rake -T
.
Wspomniana tutaj "WERSJA" jest wartością całkowitą na początku każdego pliku migracji (jest to tylko znacznik czasu, kiedy została utworzona). Na przykład "VERSION = 20150720023630". –
Wersje są ładnie wyświetlane z rake db: migrate: status – jpgeek
Musiałem przeprowadzić pojedynczą migrację, która uległa zmianie i trzeba ją było ponownie uruchomić niezależnie od wszystkich innych migracji. Odpalić konsolę i to zrobić:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
Więcej użytecznie to może być wprowadzone do zadania natarcia itd
To działało niesamowicie. Możesz także po prostu skopiować i wkleić kod z migracji do konsoli, aby zdefiniować klasę (i to pozwoli na ręczną manipulację, jeśli zajdzie taka potrzeba, na przykład jeśli popełnisz błąd na Dev). Jeśli zdefiniowałeś odwracalną migrację z 'change', uruchom' YourMigrations.migrate (: up) 'zamiast (lub': down' też!) – trisweb
możesz potrzebować 'require '# {Rails.root}/db/migrate/your_migrations.rb "' – s2t2
Mam metodę narzędziowy, który sprawia, że to bardzo łatwe w rozwoju. 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/
rake db:migrate:up VERSION=version_no
będą migrować (dodaj) specyficzny scenariusz migracji
rake db:migrate:down VERSION=version_no
kasuje konkretny skrypt do migracji
Rozwijając na odpowiedź przez Korch powyżej require
zrobił nie działa dla mnie, ale load
zrobił. Aby być beton, dla pliku migracji:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
w konsoli wpisując
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
pracował dla mnie.
> Race.new.min_quantity # => 0
To Ruby 1.9.3p484 (22.11.2013 zmiany 43786) [x86_64-Linux] Szyny i 3.2.13.
Genialny, działa bezbłędnie! – Loed
rake db:migrate:redo version='xxxx'
Pamiętaj o umieszczeniu cudzysłowu wokół xxxx, xxxx to znacznik czasu (lub identyfikator migracji) dla migracji.
Możesz sprawdzić znaczniki czasu (migracja ID) dla poprzednich wędrówek zrobiłeś za pomocą
rake db:migrate:status
Dodawanie moje 2 ¢ to dlatego wpadłem na tej samej kwestii:
Jeśli absolutnie chce uruchomić migrację kółko bez tworzenia nowego, można wykonać następujące czynności:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
i szyn będzie " zapomnij ", że uruchomił migrację do 20150105181157. Teraz po uruchomieniu db: migrate uruchomi go ponownie.
To jednak prawie zawsze zły pomysł. Jedynym przypadkiem, w którym może to mieć sens, jest posiadanie gałęzi rozwojowej i jeszcze nie opracowałeś swojej migracji i chcesz dodać kilka rzeczy do rozwoju. Ale nawet wtedy lepiej jest przeprowadzić twoją migrację dwukierunkową, abyś mógł poprawnie przywrócić i ponawiać próbę wielokrotnie.
Używam tej techniki w fazie rozwoju, kiedy zmienię migrację na znaczną ilość i nie chcę migrować mniej niż tonę i tracić jakiekolwiek dane po drodze (zwłaszcza, gdy importuję starsze dane, które wymagają przez długi czas, że nie chcę ponownie importować).
Jest to 100% hackish a ja zdecydowanie nie polecam robić to w produkcji, ale będzie to rade:
- Move migracji, które chcesz ponownie uruchomić z jego katalogu do tymczasowego miejsca
- wygenerować kolejną migrację o tej samej nazwie
- Kopiuj/wklej oryginalny kod migracji do nowo wygenerowanym pliku migracji
- Run nowy migracji
- Usuń nowo ge nerated plik migracji
- zmieniać swoich migracje schematu, aby usunąć ostatnią wartość
- Przywróć stary plik migracji
- 1. Zapewnienie tylko jedna instancja aplikacji
- 2. Udane pobranie rake db: migracja, ale kolumny nie działają
- 3. Migracja w dół za pomocą tylko jednej migracji
- 4. DISTINCT tylko jedna wartość z SPARQL
- 5. rake db: migrate nie wykrywa nowej migracji?
- 6. Migracja silników Rails 3.1 nie działa
- 7. Dlaczego zadanie Rake w pętli wykonuje się tylko raz?
- 8. aktualizacja do szyn 4.2.6: rake db: migracja wstawiania limitów kolumn do schematu.rb
- 9. sklearn auc ValueError: Tylko jedna klasa obecna w y_true
- 10. Dodaj 2 listy widoków w szufladzie nawigacji, tylko jedna działa
- 11. NSDateFormatter nie pokazuje pełnej nazwy miesiąca, tylko jedna cyfra numeru
- 12. dostosowywania tylko jedna strona znacznikami w matplotlib użyciu kolce
- 13. nhibernate, nie można rozwiązać właściwości QueryOver tylko jedna tabela
- 14. UnitTest Python fałszywa tylko jedna funkcja wielokrotnego wywołania
- 15. Rake zadań w innych plikach
- 16. szyny 4,0, rake db: sesje: tworzenie
- 17. has_many migracja asocjacji w Railsach
- 18. Jedna instancja działania
- 19. Jedna definicja klasy linii?
- 20. Używanie prowizji db: migracja prosta, wanilia SQL
- 21. Migracja Git-2-SVN?
- 22. Jak jedna struktura CMS?
- 23. Różnica między aktywami rake: prekompilacja i atuty rake: clobber
- 24. rake db: create vs rake db: create: wszystko
- 25. Jak dodać zadanie Rake do domyślnego zadania Rake?
- 26. Jaki jest cel Rake?
- 27. render_to_string z zadania rake
- 28. Rails - Pierwsze błąd Rake
- 29. Kontynuuj Rake po awarii
- 30. Komenda Heroku rake
byłoby to wygodne poręcze wyposażone: dodanie 'STEP = n' argument' db: migrować '(gdzie' n' to liczba migracji do uruchomienia, tak jak w przypadku 'db: rollback') - wtedy możesz zrobić:' rake db: migrate STEP = 1' lub 'rake db: migrate STEP = 2', itp. – user664833