Comment écrire tâche Rake pour importer des données d'application Rails?

Objectif: à l'Aide d'une tâche CRON (ou d'un autre événement prévu) mise à jour de la base de données avec tous les soirs à l'exportation de données à partir d'un système existant.

Toutes les données est créé ou mis à jour ou supprimés dans un système existant. Le site n'est pas directement intégrer à ce système, de sorte que l'application rails simplement doit refléter les mises à jour apparaissent dans l'exportation de données.

J'ai un .txt fichier de ~5 000 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 de caractères entre guillemets (") qui sont séparés par des deux points (:)

Champs sont:

  • id: id unique; alphanumériques
  • name: nom du produit; tout caractère
  • colonnes d'attributs: les chaînes de caractères; n'importe quel caractère (p. ex., taille, poids, couleur, dimension)
  • vendor_name: string; tout caractère
  • vendor_id: code fournisseur unique; numérique

Informations de fournisseur n'est pas normalisée dans le système actuel.

Quelles sont les meilleures pratiques? Est-il acceptable de supprimer les produits et les vendeurs de tables et de réécrire avec les nouvelles données sur chaque cycle? Ou est-il préférable de n'ajouter de nouvelles lignes et de mise à jour de celles existantes?

Notes:

  1. Ces données seront utilisées pour générer Orders qui perdurera à travers tous les soirs de la base de données des importations. OrderItems aura besoin d'être connecté à l'id de produit qui sont spécifiés dans le fichier de données, de sorte que nous ne pouvons pas compter sur une incrémentation automatique de la clé primaire sera le même pour chaque importation; l'unique id alphanumérique devra être utilisé pour joindre les products à order_items.
  2. Idéalement, j'aimerais que l'importateur afin de normaliser le Fournisseur de données
  3. Je ne peux pas utiliser de la vanille SQL, donc j'imagine que je vais avoir besoin d'écrire un rake tâche afin d'utiliser Product.create(...) et Vendor.create(...) la syntaxe de style.
  4. Ce sera mis en œuvre sur EngineYard

OriginalL'auteur maček | 2010-07-27