2

我必须调用 externals API 来填充我的数据库,每小时托管在 Heroku 上。

为此,我有一个 ruby​​ 脚本,它从外部 API 获取所有数据并在标准输出上输出。现在,我想将这些结果存储在我的数据库中,我有不同的方法来做到这一点(如果你知道更好的方法,请发表评论)。

我有什么(约束):

  • 在 Heroku 上运行的 Ruby on Rails 应用程序
  • PG 数据库托管在 Heroku 上
  • “汽车”模型,具有“标题”、“描述”、“价格”属性和 1 个来自“用户”模型的其他嵌套属性(因此 PG 中的模式相同)。
  • 查询不同外部 API 的 Ruby 脚本
  • Ruby 脚本必须每小时/2 小时/天调用一次。该脚本将运行大约 10 分钟 -> 2 小时,具体取决于结果的数量

我的 3 种不同的方法:

  • 在 EC2 实例上运行脚本,并使用外部登录直接填充我的数据库,而不是通过 Ruby on Rails REST API。问题是它从不要求 Ruby on Rails 验证器,例如,如果我的数据库发生更改,或者我必须验证一些数据,它就不会。
  • 在 EC2 实例上运行脚本,并用 cll 填充我的数据库到我的 RoR REST API,因此用 JSON / XML 填充数据。问题是我认为如果我有超过 1000 个来自 API 的调用,它会使我的测功机承受高负载。
  • 在 Heroku 上的特定测功机上运行我的脚本(我需要一些信息,我在 Heroku 上找不到一些信息)
  • (如果您知道更好的方法,请发表评论)

你怎么看 ?我需要一些真正进化的东西,如果明天我改变我的“汽车”模型,一切都必须很容易在新旧模型之间进行切换。

谢谢你。

4

2 回答 2

4

我认为最好的方法是使用后台进程来执行工作。像http://sidekiq.org/和 DelayedJob 这样的 Gem 都能够安排作业(在您的情况下,它们会在 2 小时后自行重新安排)。

在 Heroku 上,worker 与您的 web dyno 分开运行,因此不会干扰性能,它还使事情变得简单,因为您无需公开 API,因为您可以从 worker 直接访问您的模型。

关于这个主题有很多 Heroku 文档;

于 2013-07-16T08:00:19.107 回答
1

您可以通过将脚本编写为 Rake 任务来完成此操作,然后使用 Heroku Scheduler 安排您的任务以特定时间间隔运行:

如果您有多个任务,您可以按计划分隔任务,然后只需添加多个计划程序。它们在一次性 dynos中运行(您以正常费率付费),并且由于它们从相同的代码库运行,因此可以利用您所有现有的应用程序代码(模型、库等)。

于 2013-07-19T20:28:54.163 回答