2014-05-19 3 views
6

Ho un'applicazione Django che sta memorizzando una grande quantità di dati nei suoi modelli. Il problema è che ogni volta che eseguo il deployment su Heroku, anche se si tratta di una piccola modifica, il database remoto con i dati corretti viene sovrascritto con il database locale dei dati fittizi.Impedisci a Django SQLite db di essere sovrascritto mentre spingo su Heroku

Scenario:

Ho un file db my_db che è remota. Ora, quando si spinge su heroku, ho solo git add>git commit solo i file con le modifiche anziché l'intero progetto. Il mio problema sta nel fatto che, in qualche modo, sovrascrive in qualche modo il database remoto con i dati locali.

C'è un modo per impedirlo?

risposta

3

Heroku does not provide a persistent filesystem.

La maggior parte delle applicazioni Heroku su cui ho lavorato utilizza PostgreSQL per il loro database, quindi questo non è un problema. Ma SQLite è solo un file che si trova in una directory da qualche parte, quindi ogni volta che si distribuisce il database andrà perso.

La soluzione più semplice è probabilmente quella di migrare da SQLite a PostgreSQL, che è molto ben supportato su Heroku (e in Django) e non perderà dati ogni volta che si distribuirà.

Se siete fermamente impegnata a SQLite si può avere alcune altre opzioni:

  • Torna vostro database di file prima di ogni spinta e ripristinarlo dopo la vostra spinta.
  • Aggiungi il tuo database di produzione al tuo repository Git, quindi verrà distribuito insieme alla tua applicazione (nota che non lo consiglio).
  • Molti utenti use Amazon S3 to store other types of assets. Potresti essere in grado di utilizzare una procedura simile con il tuo database, anche se sospetto che ci saranno alcuni rischi per la sicurezza molto significativi.
+0

Come si fa l'opzione n. 2, che aggiunge il database di produzione al repository git? –

+0

@ devhaven.herokuapp.com, vi consiglio caldamente di farlo, ma semplicemente aggiungerete il vostro file di database al vostro repository come qualsiasi altro file e assicuratevi di impegnarvi le modifiche necessarie. Si noti che questa opzione è particolarmente negativa se si intende modificare il database su Heroku: non penso che sia possibile eseguire il commit degli aggiornamenti e il filesystem effimero potrebbe essere ancora un problema. Funzionerebbe ragionevolmente bene se lo si stesse utilizzando come database delle impostazioni di sola lettura, ad esempio. Per favore considera seriamente la migrazione a PostgreSQL (o ad un altro database client-server supportato). – Chris

0

si dovrebbe aggiungere il file db per .gitignore

+0

Questa è una risposta valida. Tuttavia, qualche idea perché sovrascrive ancora tutti i miei file? – Newtt

+0

Posso solo supporre che non conosco heroku o come sia stata impostata la distribuzione. Tuttavia, anche se non si sta aggiungendo o impegnando il file db locale, sembra che nel repository ci sia ancora una versione. Se le modifiche al codice vengono implementate tramite un checkout, il file db sovrascriverà la produzione db – hellsgate

Problemi correlati