我必须每小时调用外部 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/