Musisz przejść z db/schema.rb do db/structure.sql .
Podstawowym problemem jest to, że schema.rb jest reprezentacją struktury bazy danych, jaką widzi ActiveRecord, ale ActiveRecord nie rozumie wielu rzeczy (takich jak create type , ograniczenia CHECK i inne rzeczy, które pojawiają się w execute some_raw_sql w migracjach), które robi PostgreSQL. Możesz create type wszystko co chcesz oprócz schema.rb nigdy go nie zobaczę.
Jeśli chcesz użyć rzeczy, których ActiveRecord nie rozumie, musisz użyć db/structure.sql do przechowywania struktury bazy danych. structure.sql przechowuje strukturę bazy danych tak, jak rozumie ją baza danych, a nie tak, jak rozumie ją ActiveRecord.
Przełączanie jest łatwe:
- Zaktualizuj plik
config/application.rbzawieraćconfig.active_record.schema_format = :sql. - Wykonaj
rake db:structure:dumpaby uzyskać początkowydb/structure.sql. - Usuń
db/schema.rbz twojego drzewa katalogów i kontroli wersji. - Dodaj
db/structure.sqldo kontroli wersji. - Dostosuj swoje nawyki dotyczące prowizji:
- Użyj
db:structure:dumpzamiastdb:schema:dump - Użyj
db:structure:loadzamiastdb:schema:load
- Użyj
To powiedziawszy, nie jestem pewien, jak dobrze natywny enum PostgreSQL typy będą współdziałać z ActiveRecord, jak nigdy tego nie robiłem. enum AR s
są tłumaczeniem po stronie klienta między ciągami i liczbami całkowitymi, ale enum s
są obsługiwane w bazie danych i nie wiedzą o sobie nawzajem. Mogą wystąpić konflikty i musisz mieć pewność, że będą one ze sobą zsynchronizowane.