2015-09-16 4 views
10

Ho questo schema:Come pre-compilare il database all'avvio di un'applicazione Phoenix?

schema "editables" do 
    field :title, :string 
    field :content, :binary 
    timestamps 
end 

vorrei che sulla domanda di start-up qualche fila sono stati creati e popolata automaticamente, dire che voglio creare 6 voci con il campo :title contenente: Pagina1, Pagina2 ,. .. dovrei farlo?

+0

Si desidera inserire questi ogni volta che si avvia l'applicazione? Questo ha un odore un po '. –

+0

Sì. Non appena inizia l'applicazione. In produzione questo non dovrebbe essere un problema. Il mio obiettivo è avere questo per l'edizione HTML dagli utenti. Sarebbe bello avere diversi campi predefiniti che sono modificabili dagli utenti che usano il contenuto HTML modificabile, ma che sono stati codificati come HTML. C'è qualcosa di strano in questo? –

+0

Non puoi semplicemente impostare un valore iniziale nel modulo, quando viene creato il 'modificabile'? –

risposta

15

Il mio suggerimento: creare un file di script che popolerà il database. Chiamiamolo priv/repo/seeds.exs:

alias MyApp.Repo 
Repo.insert! %MyApp.Data{...} 
Repo.insert! %MyApp.Data{...} 

In fase di sviluppo è possibile eseguirlo come

mix run priv/repo/seeds.exs 

o quando è necessario nella produzione:

MIX_ENV=prod mix run priv/repo/seeds.exs 

non vedo alcun motivo per voi di fallo ogni volta che si avvia l'app. Immagina che ogni comando che esegui in fase di sviluppo, test o produzione ora debba pagare la penalità della creazione di dati nel database. Non è una buona idea

+0

Ok, quindi il tuo suggerimento è di creare uno script che possa essere eseguito usando Mix ogni volta che voglio popolare il database invece di inserire il codice nel progetto in un file lib (o altro .ex), per esempio. L'ho capito? –

+0

OK, penso di averlo capito. Ero prevenuto perché venendo da Meteor ero solito farlo all'interno di una funzione 'Meteor.startup' che esegue il codice all'avvio di un client o di un server ... Grazie per aver trovato il tempo di rispondermi. –

+2

Una grande UAU per te, Chris e il resto della squadra. Sono stupito perché la soluzione era già presente nei file di progetto (non l'ho mai esaminata prima ...) e la documentazione è superba, collegando definizioni che consentono ai nuovi arrivati ​​di capirlo tutto! Profondo apprezzamento –

Problemi correlati