0

iTunes 企业合作伙伴源是“来自 iTunes 和 App Store 的完整元数据集的数据源”并且“以两种不同的格式提供 - 作为构建关系数据库所需的文件或作为独立的平面文件依赖于国家和媒体。”

我需要使用此提要中的数据(本质上是导出到平面文件中)并允许将我自己的模型对象(用户、活动等)链接到提要提供的数据(应用程序、开发人员等)。数据以每周完整导出每日增量导出的形式提供。

对于实现这一点,我有两个想法:

  1. 在我的 rails 应用程序中创建所有模型并编写我自己的导入器,它将使用我创建的模型(应用程序、开发人员等)每天通过 cron 将记录直接插入/更新到我的应用程序的数据库中
  2. 保持这个数据库完全独立并打开我自己的应用程序将使用的 REST API

我使用#1将所有内容保留在 Rails 应用程序中的天真方法是基于能够观察我从 EPF 获得的数据的变化的需要。例如,如果更新了 App 的描述,我希望能够通过观察者创建一个 Activity 对象来跟踪该更新。

一方面,#2感觉是一种更好的方法,因为它在数据中创建了一个独立的 API,可以从我创建的几个不同的应用程序中使用。另一方面,我只是不确定如何在不直接在我自己的模型上使用观察者的情况下完成数据更改通知。或者,我什至如何以面向对象的方式使用仍然可以与我自己的模型一起使用的数据。感觉需要查询 API 以获取应用程序的数据、为其创建适当的 Active Record 对象然后保存它,以便它可以链接到我自己的模型之一,这感觉就像是很多重复的工作。

有没有一种我完全想念的标准方法来做到这一点?任何指针?

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

4

1 回答 1

0

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

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

  1. 引擎宝石 = transaction_core
  2. 该 gem 使用来自源的事务数据并将其插入到我的事务数据库中。
  3. gem 包含在我的中央应用程序中,我使用 cron 上的 rake 任务提取事务数据
  4. 我将这个 gem 包含在其他几个需要使用交易数据的应用程序中。由于引擎会自动将模型和数据库配置添加到应用程序中,因此在应用程序中使用模型不需要额外的工作。

我没有在包含我的引擎的应用程序中使用观察者,但我看不出它为什么不起作用。使用引擎,模型就像在您的 app/models 目录中一样工作。希望这可以帮助!

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

于 2010-11-19T05:47:21.547 回答