2014-12-16 9 views
7

Ho appena creato una nuova funzione Postgres personalizzata tramite la normale migrazione.Rails schema.rb non include la nuova funzione Postgres personalizzata

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

Dopo la migrazione, questa nuova funzione non è disponibile in schema.rb.

Come per il documento ufficiale, utilizzo il comando db:schema:load per creare lo schema prima di eseguire i miei test.

Quindi, qual è la procedura migliore per creare funzioni personalizzate prima di eseguire i test?

risposta

12

schema.rbdoes not handle (consultare la sezione 6.2 delle guide di Rails 3.2.xe la sezione 7.2 delle guide di Rails 4) o le funzioni personalizzate. Abbiamo una vista nella nostra applicazione e lo schema non funziona per questo.

Utilizziamo invece structure.sql poiché questo imposta correttamente la nostra vista e, il mio senso è lo stesso si applicherebbe qui per le funzioni personalizzate. Per utilizzare structure.sql anziché schema.rb:

'impostata in config/application.rb dall'impostazione config.active_record.schema_format, che può essere: SQL o: rubino.

È inoltre possibile utilizzare una combinazione di schema.rb (per tavoli regolari & indice) e structure.sql (per funzioni personalizzate). Per impostare questo combo per ambienti di test:

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

In questa configurazione, si noti che lo structure.sql deve essere mantenuta manualmente mentre schema.rb sarà mantenuto da Rails per voi.

+0

Ho intenzione di utilizzare una combinazione di schema.rb e structure.sql. E usa 'db: structure: load' per creare le funzioni personalizzate. – emaillenin

+0

Bello! Non ho mai combinato l'azione combo prima. Mi piacerebbe sapere come funziona (e potrebbe rendere la mia vita lavorativa più facile LOL). –

+2

ha aggiornato la tua risposta con l'impostazione combinata! – emaillenin

Problemi correlati