2011-08-20 8 views
5

Potrzebujemy dodać więcej danych początkowych dla niektórych nowo dodanych tabel do "wersji 100" naszego projektu szyn.Czy istnieje sposób na wiele plików seeds.rb? Wszelkiego rodzaju "wersjonowanie" danych o nasionach?

Jednakże, jeśli po prostu dodamy go do seeds.rb i ponownie uruchomimy polecenie rake db: seed, to oczywiście ponownie doda oryginalne dane początkowe, powielając je.

Więc jeśli już dodałeś dane źródłowe do seeds.rb dla, powiedzmy, TableOne ... w jaki sposób możemy przyrostowo dodawać dane początkowe dla TableTwo i TableThree na późniejszych etapach rozwoju?

Miałem nadzieję, że może po prostu utworzyć nowy plik seeds_two.rb i uruchomić rake db:seeds_two ale dał błąd Don't know how to build task 'db:seeds_two'

tak wygląda ONLY „seeds.rb” może być używany - tak jak ludzie utrzymują przyrostowe dodatki do danych źródłowych?

+0

dlaczego nie można po prostu uruchomić 'rake db: reset', aby uniknąć duplikacji? –

+0

Generalnie generuję dane w samej migracji, która dodaje tabelę. Chociaż nie idealny, ale wydaje się rozsądny. Byłbym zainteresowany, aby dowiedzieć się, co robi inny koder szyny w tej sytuacji. – rubish

+0

@nash - doesnt db: reset wytrzeć nasze dbase - np. Wszystkie nasze rzeczywiste dane klienta rzeczywistego? – jpwynn

Odpowiedz

10

Możesz ponownie użyć zadania seed, ale ustaw to jako idempotent.

Aby zarodek był idempotentny, po prostu sprawdź, czy istnieje warunek przed wykonaniem polecenia. Przykład: czy chcesz utworzyć nowego administratora?

User.find_or_create_by_username(:username => "admin") 

zamiast

User.create(:username => "admin") 

Jednak seed powinny być wykorzystywane do zapełniania bazy danych, gdy projekt jest tworzony. Jeśli chcesz wykonać złożone przesiewanie danych w trakcie cyklu życia aplikacji, po prostu utwórz nowe zadanie rake, wykonaj je, a następnie usuń.

+2

Świetna odpowiedź, dziękuję. Poza tym nauczyłem się nowego fajnego słowa, którego mogę używać na przyjęciach ("Życzę sobie, aby kalorie w gorących bananowych deserach były idempotentne");) Ale mam pytanie ... jak sobie radzisz z przypadkiem, w którym twój projekt ewoluuje, dodasz nowe pola, a zatem potrzebujesz nowych danych początkowych, aby przejść do tych nowych pól? Grabie? lub Seed? – jpwynn

+0

Jeśli potrzebuję więcej danych źródłowych, aby objąć nowe modele, używam pliku seed.rb. Jeśli muszę tylko wypełnić lub zmienić dane w środowisku produkcyjnym, tworzę tymczasowe zadania rake. –

Powiązane problemy