Grabie tylko jedna migracja

Próbuję uruchomić tylko jedną migrację z całej masy w mojej aplikacji rails. Jak mogę to zrobić? Nie chcę uruchamiać żadnej migracji przed lub po niej. Dzięki.

Author: Anon, 2009-08-26

11 answers

rake db:migrate:redo VERSION=xxxxxxx, ale to uruchomi down, a następnie up Krok. Możesz to zrobić w połączeniu z komentowaniem kroku w dół tymczasowo.

 149
Author: Ryan Bigg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 03:04:36
rake db:migrate:up VERSION=1234567890

Podobnie rake db:migrate:down aby ograniczyć migrację specyficzną. Listę dostępnych zadań rake można uzyskać za pomocą rake -T.

 61
Author: Shadwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 09:03:51

Musiałem uruchomić pojedynczą migrację, która się zmieniła i musiała zostać ponownie uruchomiona niezależnie od wszystkich innych migracji. Odpal konsolę i zrób to:

>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down

Bardziej użyteczne To może być wprowadzone do zadania grabie itp.

 23
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-13 08:37:49

rake db:migrate:up VERSION=version_no

Spowoduje migrację (dodanie) skryptu migracji specyficznej

rake db:migrate:down VERSION=version_no

Usunie skrypt migracji specyficznej

 8
Author: reshma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 00:27:15
rake db:migrate VERSION=20098252345
Spróbuj.
 7
Author: JP Silvashy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 22:30:47

Rozszerzając odpowiedź korcha powyżej, require nie zadziałało dla mnie, ale load zadziałało. Aby być konkretnym, 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
Zadziałało dla mnie.
    > Race.new.min_quantity # => 0 

To było dla ruby 1.9. 3p484 (2013-11-22 revision 43786) [x86_64-linux] i Rails 3.2.13.

 3
Author: user2001785,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 13:31:06
rake db:migrate:redo version='xxxx'   

Pamiętaj, aby umieścić cudzysłów wokół xxxx, xxxx jest znacznikiem czasu (lub ID migracji) dla Twojej migracji.

Możesz sprawdzić znaczniki czasu (ID migracji) dla poprzednich migracji za pomocą

rake db:migrate:status    
 3
Author: hexinpeter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 03:08:51

Dodaję do tego Moje 2 grosze, bo natknąłem się na ten sam problem:

Jeśli chcesz przeprowadzić migrację od nowa bez tworzenia nowej, możesz wykonać następujące czynności:

rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';

I rails "zapomni", że przeprowadził migrację dla 20150105181157. Teraz po uruchomieniu db:migrate uruchomi go ponownie.

To jednak prawie zawsze jest zły pomysł. Jedynym przypadkiem, w którym może to mieć sens, jest to, że masz gałąź rozwoju i nie udoskonaliłeś swojej migracja jeszcze i chcesz dodać kilka rzeczy do niego w rozwoju. Ale nawet wtedy lepiej jest, aby Twoja migracja była dwukierunkowa, abyś mógł odpowiednio cofnąć i ponawiać wielokrotnie.
 2
Author: Ken Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-08 18:30:25

Musi być jakiś sposób na uruchomienie klasy migracji przez konsolę. Nie mogę uzyskać kodu migracji, aby był rozpoznawalny.

Jednak, jak wskazują komentarze, preferowane jest uruchamianie migracji w kolejności. Użycie:

rake db:migrate VERSION=##########

Skopiować i wkleić kod w migracji do skryptu / konsoli?

 1
Author: Terry Lorber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 02:54:57

Mam metodę użytkową, która sprawia, że jest 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/

 1
Author: aceofspades,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-15 03:52:15

Używam tej techniki w rozwoju, gdy zmieniam migrację znaczną ilość i nie chcę migrować w dół ani tracić żadnych danych w tych po drodze(zwłaszcza, gdy importuję starsze dane, które zajmują dużo czasu, że nie chcę ponownie importować).

To jest 100% hackish i zdecydowanie nie polecam robienia tego w produkcji, ale da radę:

  1. Przenieś migrację, którą chcesz ponownie uruchomić z katalogu do tymczasowego miejsce
  2. Wygeneruj kolejną migrację o tej samej nazwie
  3. skopiuj / wklej oryginalny kod migracji do nowo wygenerowanego pliku migracji
  4. uruchom nową migrację
  5. Usuń nowo wygenerowany plik migracji
  6. Edytuj migracje schematu, aby usunąć najnowszą wartość
  7. Przywróć stary plik migracji
 0
Author: Greg Blass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 20:39:55