Les meilleures pratiques pour l'importation d'une décharge de base de données partielle dans une application quotidienne des rails?

StackOverflow https://stackoverflow.com/questions/4220320

Question

Le iTunes Enterprise Partner RSS est « un flux de données de l'ensemble des métadonnées à partir d'iTunes et l'App Store » et « est disponible en deux formats différents - soit les fichiers nécessaires pour construire une base de données relationnelle ou sous forme de fichiers plats autonomes qui sont le pays et les médias dépendante. "

J'ai besoin de consommer les données de ce flux (qui est essentiellement exportée dans des fichiers plats) permettant de relier de mes objets miniatures (utilisateur, activité, etc.) aux données fournies par l'alimentation (App, développeur, etc. ) Les données sont fournies en pleine exportation hebdomadaire et une exportation incrémentielle quotidienne.

J'ai deux idées pour les moyens de mettre en œuvre ceci:

  1. Créer tous les modèles dans mon rails app et écrire mon propre importateur qui insérera / mise à jour des enregistrements directement dans la base de données de mon application quotidienne via Cron en utilisant des modèles que j'ai créés (App, développeur, etc.)
  2. Gardez cette base de données entièrement séparée et d'ouvrir API REST que mon application consommera

Mon approche naïve avec # 1 pour tout garder dans l'application Rails est basée sur la nécessité de pouvoir observer les changements dans les données que je reçois de la FPE. Par exemple, si la description d'une application est mise à jour, je veux être en mesure de créer un objet d'activité par un observateur pour suivre cette mise à jour.

D'une part # 2 se sent comme une meilleure approche, car elle crée une API autonome dans les données qui peuvent être consommés de plusieurs applications différentes que je crée. D'autre part, je ne suis pas sûr de savoir comment j'accomplir les notifications de modification de données sans utiliser les observateurs directement sur mes propres modèles. Ou, comment je dirais même consommer les données dans un objet qui pourrait manière orientée encore être utilisé avec mes propres modèles. Il se sent comme beaucoup de travail en double devoir interroger l'API pour, par exemple, les données d'une application, créez un objet Active Record bon pour elle et puis enregistrez-le tout de sorte qu'il peut être lié à l'un de mes propres modèles.

Yat-il un moyen standard pour faire ce que je suis totalement absent? Tous les pointeurs?

EDIT: Rails moteurs sonores intéressants, mais cela signifierait que chaque application aurait encore besoin de consommer et d'insérer les données séparément. Cela ne semble pas si sec. Il semble de plus en plus comme une API REST est le chemin à parcourir. Je ne sais pas comment combler l'écart de l'API au modèle Active Record.

Était-ce utile?

La solution

Rails moteurs pourraient être un bon moyen pour cela. Vous pouvez créer un bijou moteur Rails et ajouter tous vos modèles et tâches de râteau pour consommer les données. Ensuite, vous pouvez inclure ce petit bijou dans toutes les applications qui l'utilise et aussi créer une application API qui comprend la pierre précieuse. Vous devriez être en mesure de créer des observateurs dans vos autres applications qui interagissent avec la gemme.

J'ai assez peu d'applications qui interagissent les uns avec les autres et cette approche fonctionne bien pour moi. J'ai une application centrale qui comprend tous les moteurs qui consomment des données et je lance tous mes cronjobs de cette application. J'utilise le plugin use_db qui permet à mon application de communiquer avec des bases de données différentes. Chaque moteur a use_db en tant que dépendance et je garde la configuration de base de données à l'intérieur de la pierre précieuse. Un exemple:

  1. Moteur Gem = transaction_core
  2. Ce petit bijou consume les données de transaction à partir d'une source et l'insère dans ma base de données de transaction.
  3. Le bijou est inclus dans mon central application et je tire les données de transaction à l'aide d'une tâche de râteau sur le Cron
  4. Je comprend ce petit bijou dans plusieurs autres applications qui ont besoin d'utiliser les données de transaction. Étant donné que le moteur ajoute automatiquement les modèles et config base de données à l'application, il n'y a pas de travail supplémentaire nécessaire pour utiliser les modèles dans l'application.

Je n'ai pas utilisé les observateurs dans une application qui inclut mes moteurs, mais je ne vois aucune raison pour laquelle cela ne fonctionnerait pas. Avec le moteur, les modèles fonctionnent comme si elles sont dans votre app / modèles. Espérons que cela aide!

Modeste Rubyist a un bon 4 tutoriel part on Rails 3 plugins qui comprend des moteurs:
http: //www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top