Obiettivo: Utilizzando un compito cron (o altro evento programmato) per aggiornare il database con l'esportazione notturno di dati da un sistema esistente.Come scrivere un'attività Rake per importare i dati nell'app Rails?
si crea Tutti i dati/aggiornati/cancellati in un sistema esistente. Il sito Web non si integra direttamente con questo sistema, quindi l'app per i binari deve semplicemente riflettere gli aggiornamenti che appaiono nell'esportazione dei dati.
Ho un file .txt
di ~ 5.000 prodotti che assomiglia a questo:
"1234":"product name":"attr 1":"attr 2":"ABC Manufacturing":"2222"
"A134":"another product":"attr 1":"attr 2":"Foobar World":"2447"
...
Tutti i valori sono stringhe racchiuse tra virgolette ("
) che sono separati da due punti (:
)
campi sono :
id
: ID univoco; alfanumericoname
: nome del prodotto; qualsiasi carattere- colonne di attributi: stringhe; qualsiasi carattere (ad es. dimensioni, peso, colore, dimensione)
vendor_name
: stringa; qualsiasi caratterevendor_id
: unico ID fornitore; numerico
Le informazioni del fornitore non sono normalizzate nel sistema corrente.
Quali sono le migliori pratiche qui? Va bene cancellare le tabelle dei prodotti e dei fornitori e riscrivere con i nuovi dati ad ogni ciclo? O è meglio aggiungere solo nuove righe e aggiornare quelle esistenti?
Note:
- Questi dati saranno utilizzati per generare
Orders
che persisterà attraverso le importazioni di database notturne.OrderItems
dovrà essere collegato agli ID prodotto specificati nel file di dati, quindi non possiamo fare affidamento su una chiave primaria ad auto-incremento per essere uguale per ogni importazione; l'ID alfanumerico univoco dovrà essere utilizzato per unireproducts
aorder_items
. - Idealmente, vorrei l'importatore per normalizzare i dati fornitore
- non riesco a utilizzare le istruzioni SQL di vaniglia, quindi immagino che avrò bisogno di scrivere un compito
rake
al fine di utilizzareProduct.create(...)
eVendor.create(...)
sintassi stile. - Questo sarà attuato su EngineYard
ho provato questo, ma sto ottenendo l'errore non definito variabile locale o un metodo 'dati' 'per il main: Object'. Qualche idea sul perché questo potrebbe accadere? – Nick
Il problema era che 'do' dati namespace doveva essere cambiato in' namespace: do' dati. – Nick