每天将部分数据库转储导入rails应用程序的最佳做法?

时间:2010-11-18 22:35:05

标签: ruby-on-rails database-design ruby-on-rails-3 itunes-store

iTunes Enterprise Partner Feed是“来自iTunes和App Store的完整元数据集的数据馈送”和“有两种不同的格式 - 可以作为构建关系数据库所需的文件,也可以作为单独的国家和媒体依赖的平面文件。“

我需要使用此Feed中的数据(实际上是导出到平面文件中)并允许将我自己的Model对象(User,Activity等)链接到feed(App,Developer等)提供的数据。 )数据以每周完整导出每日增量导出的形式提供。

我有两个实现方法的想法:

  1. 在我的rails应用程序中创建所有模型并编写我自己的导入器,它将使用我创建的模型(应用程序,开发人员等)每天通过cron直接将记录插入/更新到我的应用程序数据库中
  2. 将此数据库完全分开并打开我自己的应用将使用的REST API
  3. 我使用#1 来保持Rails应用程序中所有内容的天真方法是基于需要能够观察我从EPF获得的数据的变化。例如,如果更新了应用程序的描述,我希望能够通过观察者创建一个Activity对象来跟踪该更新。

    一方面#2 感觉就像是一种更好的方法,因为它会在数据中创建一个独立的API,可以从我创建的几个不同的应用程序中使用。另一方面,我不确定如果不直接在我自己的模型上使用观察者,我将如何完成数据更改通知。或者,我甚至会以面向对象的方式使用数据,这仍然可以用于我自己的模型。感觉就像要复制一个应用程序数据的API,为它创建一个合适的Active Record对象,然后保存它,以便它可以链接到我自己的模型之一。 >

    有没有一种标准的方法来做到这一点我完全失踪了?有什么指针吗?

    编辑: Rails引擎听起来很有趣,但这意味着每个应用仍然需要消费并单独插入数据。这听起来不那么干。听起来越来越像REST API是要走的路。我只是不知道如何弥合从API到Active Record模型的差距。

1 个答案:

答案 0 :(得分:0)

Rails引擎可能非常适合这种情况。您可以创建Rails引擎gem并添加所有模型和rake任务以使用数据。然后,您可以在任何使用它的应用程序中包含此gem,并创建包含gem的API应用程序。您应该能够在与gem交互的其他应用程序中创建观察者。

我有很多相互交互的应用程序,这种方法对我很有用。我有一个中央应用程序,其中包含所有使用数据的引擎,我从这个应用程序运行我的所有cronjobs。我使用use_db插件,允许我的应用程序与不同的数据库进行通信。每个引擎都有use_db作为依赖项,我将数据库配置保留在gem中。一个例子:

  1. Engine Gem = transaction_core
  2. 此gem使用来自源的事务数据并将其插入到我的事务数据库中。
  3. 我的中央应用程序中包含了gem,我使用cron上的rake任务提取事务数据
  4. 我将此gem包含在其他几个需要使用交易数据的应用中。由于引擎会自动将模型和数据库配置添加到应用程序,因此在应用程序中使用模型无需额外的工作。
  5. 我没有在包含我的引擎的应用程序中使用观察者,但我认为没有理由说它不起作用。使用引擎,模型就像在app / models目录中一样工作。希望这有帮助!

    谦虚的Rubyist有一个很好的4部分关于Rails 3插件的教程,其中包括Engines:
    http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/