2016-07-05 30 views
31

Po uaktualnieniu app szyn Szyny 5, uruchamiania testów RSpec daje mi następujący błąd:Szyny 5, rspec: dane środowisko nie stwierdzono w schemacie

rails aborted! 
ActiveRecord::NoEnvironmentInSchemaError: 

Environment data not found in the schema. To resolve this issue, run: 

    bin/rails db:environment:set RAILS_ENV=test 

jednak, że bin nie istnieje i mogę Wydaje się, że generuje go z bundle binstubs rails lub z rake rails:update:bin.

Próbowałem również:

rails db:environment:set RAILS_ENV=test 
rake db:environment:set RAILS_ENV=test 

Jest powiązany problem na Github here.

Jak mogę rozwiązać ten błąd?

+0

Ogólnie: to jest straszne, ponad inżynierii, nadmiernie skomplikowane zmiany.'env RAILS_ENV = {{what}} bin/rake db: migrate spec' pracowało po prostu dobrze – Barry

Odpowiedz

30

Nowe Szyny 5 komenda do wygenerowania binstubs:

rails app:update:bin 

pozwala mi uruchomić rozwiązanie jako błędu sugeruje:

bin/rails db:environment:set RAILS_ENV=test 

Tip od @max komentarza: Jeśli używasz database_cleaner i to błąd ciągle pojawia się, a następnie zmień konfigurację na:

DatabaseCleaner.clean_with(
    :truncation, 
    except: %w(ar_internal_metadata) 
) 
+24

Jeśli używasz' database_cleaner' i ten błąd ciągle się pojawia, zmień konfigurację na 'DatabaseCleaner.clean_with: truncation, z wyjątkiem: % w (ar_internal_metadata) '- https://github.com/DatabaseCleaner/database_cleaner/issues/445 – max

+0

omg, rozwiązanie db_cleaner działa! : P nie wiedział, że env zostało ustawione w tym stole. – Frexuz

5

Dla mnie po tym błędzie pojawiła się podobna prośba o migrację.

To załatwiło sprawę: rails db:migrate RAILS_ENV=test

2

dla mnie, musiałem zrobić mieszankę rzeczy:

bin/rails db:environment:set RAILS_ENV=test 
bin/rails db:migrate RAILS_ENV=test 

uczyniłoby to wszystko działa, a potem musiałem przejrzeć migracje, byłem dodawanie wartości null: false do relacji i która dodała błąd, migracja została anulowana i nie zakończyła się

7

poprawka dla jenkins przed usunięciem bazy danych należy wykonać db:environment:set z || true, więc polecenie doesn „T przerwać:

bin/rails db:environment:set RAILS_ENV=test || true 
1

musiałem odrzucić moją bazę do badań i utworzyć go ponownie:

  1. psql
  2. DROP DATABASE your_db_name_test;
  3. bundle exec rake db:create RAILS_ENV=test

Po że ostrzeżenie bin/rails db:environment:set RAILS_ENV=test zniknął.

1

Wszystkie powyższe odpowiedzi są jednak poprawne, jeśli jesteś w bardziej unikatowym projekcie, takim jak opracowanie silnika szyny z koncepcją schematu (hacky, wiem) i Twoja migracja z jakiegoś powodu nie powiedzie się, można go ponownie uruchomić bez kontroli, która zgłasza ten wyjątek. Przykład:

rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1