Objectif: Utilisation d'une tâche CRON (ou d'un autre événement planifié) pour mettre à jour la base de données avec l'exportation nocturne des données d'un système existant.Comment écrire une tâche Rake pour importer des données dans l'application Rails?
Toutes les données sont créées/mises à jour/supprimées dans un système existant. Le site Web ne s'intègre pas directement à ce système, l'application rails doit simplement refléter les mises à jour apparaissant dans l'exportation de données.
Je dispose d'un fichier .txt
de ~ 5000 produits qui ressemble à ceci:
"1234":"product name":"attr 1":"attr 2":"ABC Manufacturing":"2222"
"A134":"another product":"attr 1":"attr 2":"Foobar World":"2447"
...
Toutes les valeurs sont des chaînes entre guillemets ("
) qui sont séparés par des virgules (:
)
Les champs sont :
id
: identifiant unique; alphanumériquename
: nom du produit; tout caractère- colonnes d'attributs: chaînes; n'importe quel caractère (par exemple, taille, poids, couleur, dimension)
vendor_name
: chaîne; n'importe quel caractèrevendor_id
: ID fournisseur unique; Numérique
Les informations du fournisseur ne sont pas normalisées dans le système actuel.
Quelles sont les meilleures pratiques ici? Est-il acceptable de supprimer les tables des produits et des vendeurs et de les réécrire avec les nouvelles données à chaque cycle? Ou est-il préférable de n'ajouter que de nouvelles lignes et de mettre à jour celles qui existent déjà?
Notes:
- Ces données seront utilisées pour générer
Orders
qui persistera dans l'importation de base de données de nuit.OrderItems
devra être connecté aux ID de produit spécifiés dans le fichier de données, de sorte que nous ne pouvons pas compter sur une clé primaire auto-incrémentée pour être la même pour chaque importation; l'identifiant alphanumérique unique devra être utilisé pour joindreproducts
àorder_items
. - Idéalement, je voudrais l'importateur de normaliser les données des fournisseurs
- Je ne peux pas utiliser des instructions SQL à la vanille, donc je suppose que je vais devoir écrire une tâche
rake
afin d'utiliserProduct.create(...)
etVendor.create(...)
syntaxe de style. - Ce sera mis en œuvre sur EngineYard
J'ai essayé, mais je reçois l'erreur 'variable locale non définie ou méthode 'données' pour principal: Object'. Des pensées pour lesquelles cela pourrait se produire? – Nick
Le problème était que 'namespace data do' devait être changé en' namespace: data do'. – Nick