ruby-on-rails - 最佳实践 - RoR 4 Heroku - Cron 每小时从外部 API 填充数据库

标签 ruby-on-rails api postgresql heroku amazon-ec2

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

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

我所拥有的(限制):

  • 在 Heroku 上运行的 Ruby on Rails 应用程序
  • 托管在 Heroku 上的 PG 数据库
  • “汽车”模型,具有“标题”、“描述”、“价格”属性以及“用户”模型中的其他 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 上找不到一些信息)
  • (如果您知道更好的方法,请发表评论)

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

谢谢。

最佳答案

我认为最好的方法是使用后台进程来执行工作。 gem 如http://sidekiq.org/和 DelayedJob 都能够安排作业(然后在您的情况下在 2 小时后重新安排作业)。

在 Heroku 上,worker 与您的 Web dynos 分开运行,因此不会干扰性能,而且还使事情变得简单,因为您不需要公开 API,因为您可以从 Worker 直接访问您的模型.

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

关于ruby-on-rails - 最佳实践 - RoR 4 Heroku - Cron 每小时从外部 API 填充数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627192/

相关文章:

sql - find_by_sql呈现数组

ruby-on-rails - 理解和创建证书请求和私钥

ruby-on-rails - 在 Ruby on Rails 中渲染部分集合正在乘以项目

api - 如何访问 feedly API

node.js - 使用 SEQUELIZE Nodejs 从表名中删除双引号

ruby-on-rails - 创建具有 has_many 关联的对象会导致 NoMethodError

api - 在 ColdFusion 中使用缓存限制对 Api 的调用

python - 如何使用 Yelp 的新 API

postgresql - 在 Postgres 10 中自动创建分区

postgresql - 使用 JPA (EclipseLink) 创建 "text[]"等 PostgreSQL 数组类型