2014-12-16 11 views
7

Właśnie utworzyłem nową niestandardową funkcję Postgres podczas zwykłej migracji.Szyny schema.rb nie zawierają nowej niestandardowej funkcji Postgresa

class CreateBestBowlingFigureFunction < ActiveRecord::Migration 
    def change 
    execute "CREATE OR REPLACE FUNCTION ......" 
    end 
end 

Po migracji nowa funkcja nie jest dostępna w pliku schema.rb.

Zgodnie z oficjalnym dokumentem używam polecenia db:schema:load do tworzenia schematu przed uruchomieniem testów.

Jaka jest najlepsza praktyka tworzenia niestandardowych funkcji przed uruchomieniem testów?

Odpowiedz

12

schema.rbdoes not handle (patrz punkt 6.2 prowadnic w Railsach 3.2.x i przekrojach 7.2 prowadnic Rails 4) lub niestandardowych. W naszej aplikacji mamy widok, a schemat nie działa.

Zamiast tego używamy structure.sql, ponieważ to poprawnie ustawia nasz widok i mój sens jest taki sam, jak w przypadku funkcji niestandardowych. Aby użyć structure.sql zamiast schema.rb:

To jest w konfiguracji/environment.rb przez ustawienie config.active_record.schema_format, które mogą być: SQL lub Ruby.

Można również użyć kombinacji schema.rb (dla stałych tablicach & indeksowe) i structure.sql (dla funkcji niestandardowych). Aby ustawić ten combo dla środowisk testowych:

bundle exec rake db:schema:load 
bundle exec rake db:structure:load 

W tej konfiguracji, należy pamiętać, że structure.sql musi być utrzymywana ręcznie podczas schema.rb zostaną utrzymane przez Rails dla Ciebie.

+0

Mam zamiar użyć kombinacji schema.rb i structure.sql. I użyj 'db: structure: load', aby utworzyć niestandardowe funkcje. – emaillenin

+0

Nice! Nie zawarłem jeszcze wcześniej żadnej kombinacji akcji. Chciałbym wiedzieć, jak to się dzieje (i może ułatwić mi życie w pracy LOL). –

+2

zaktualizowałeś swoją odpowiedź przy pomocy konfiguracji combo! – emaillenin

Powiązane problemy