2013-02-23 26 views
9

Sto cercando di creare tutte le mie tabelle da schema.rbCome creare un database da schema.rb senza inizializzare Rails?

ho usato il comando: "rake db: schema: load"

Tuttavia, questo non riesce a causa di uno dei miei initializers, si fa riferimento a un modello/tabella che ovviamente non esiste (poiché il database è vuoto)

Posso commentare queste righe e quindi eseguire lo schema: caricare di nuovo, ma esiste un'alternativa?

risposta

5

È possibile aggiungere un controllo per la tabella esistente nel proprio inizializzatore.

if TheModel.table_exists? 
    // do something with the model 
end 
+0

Ho finito per utilizzare questo approccio nell'inizializzatore della gemma ActiveAdmin, poiché tale gemma si carica completamente in modo errato. Comunque, +1. – MrDerp

28

Probabilmente il modo più veloce è spostare semplicemente l'inizializzatore all'origine in una directory temporanea esterna all'app e quindi eseguire il caricamento dello schema. Ma se questo non funziona, o non è un'opzione per qualche motivo, si può sempre risolvere che con la creazione di un Bare Bones rotaie app per fare il carico di schema:

  1. Creare una nuova applicazione Rails: rails new (app)-fixer
  2. Copia il tuo gemfile (a meno che non vi siano eccezioni specifiche) all'app del fissatore.
  3. Copia la tua configurazione database.yml nell'app fixer.
  4. Copia il tuo file schema.rb nell'app fixer.
  5. Eseguire tutti i comandi di "installazione bundle" necessari per l'app.
  6. Poi gestita "rake db:drop db:create db:schema:load"

che costruirà un nuovo database da zero, in base alla schema corrente.

+0

Dovrebbe essere la risposta accettata. Ha funzionato come un fascino – Aakanksha

Problemi correlati