2014-09-02 27 views
5

Używam Rails 4.1 i PostgreSQL i używam foreigner gem do tworzenia ograniczeń klucza obcego. Ale mam pewne problemy z fixtures.Jak pracować z testami i urządzeniami w bazie danych z kluczami obcymi w Railsach?

Kiedy biegnę:

spring rake test 

mam błędy takie jak następujące:

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: update or delete on table "pessoas" violates foreign key constraint "pacientes_pessoa_id_fk" on table "pacientes" 
DETAIL: Key (id)=(980190962) is still referenced from table "pacientes". 
: DELETE FROM "pessoas" 

znalazłem obejście: odtworzenie bazy danych:

RAILS_ENV=test spring rake db:reset && spring rake test 

mogę uzyskać jakąś błędów, gdy próbuję wysiewać bazę danych programowania za pomocą urządzeń przy użyciu rake db:fixture:load.

Próbowałem już zmienić kolejność ładowania urządzenia w test_helper.rb, ale to nie wystarczyło.

Ktoś wie, jak to naprawić? Szukałem dużo w sieci i nie znalazłem rozwiązania.

+0

Jakieś postępy w tej kwestii? –

+0

Możesz uruchomić wiele skryptów rake jednocześnie 'RAILS_ENV = test spring rake db: reset test' – zeeraw

Odpowiedz

2

Tak, wiem na pewno, że to działa, chociaż nie mogę powiedzieć, że jest to poprawna praca.

Musisz ustawić użytkownika jako SUPERUSER.

W moim przypadku przy użyciu Cloud 9, użytkownik, na którym jestem zalogowany jest "ubuntu".

wejdę sudo -u postgres'owy psql (właściwie sudo dwukrotnie C9 aby uzyskać dostęp poprawnie) i typ:

ALTER USER SUPERUŻYTKOWNIK ubuntu;

Zamknij i będzie działać.

Jeśli uruchomisz rejestr końcowy/test.rb, po uruchomieniu testu integracji zobaczysz PG :: InsufficientPrivlege: ERROR, więc użytkownik nie ma wystarczających uprawnień. Nie chciałbyś tego robić w produkcji, ale moja produkcja jest na Heroku, więc jestem dobra.