ruby-on-rails - 基于间隔的API访问和处理不同的DSL

标签 ruby-on-rails json api

背景

我目前正在开发一个需要访问和处理外部 API 的小型 Rails 5 项目。 API 有一个 ruby​​ 包装器 gem,因此访问数据不是问题。

问题描述

我目前缺少等式的两个部分,希望有人能帮助我。

1:我需要每 15 分钟通过 Rails 调用一次 API。我怎样才能意识到这一点?为此,我一直在寻找 Active Job,但由于没有得到有用的结果,我的研究有点停滞了。

2:外部 API 与我的应用程序具有不同的领域模型和不同的领域特定语言。如何在不更改 Active Record 的情况下映射不同的模型?

最佳答案

1: I need to call the API, via Rails, every 15 minutes. How can I realize this? I was looking towards Active Job for this, but my research kind of stalled after getting no useful results.

您可以使用循环任务解决的第一个问题。主要思想是运行将每 x 分钟(或天或任何适合您的问题的任何时间)执行一些操作的过程。

您可以使用多种工具。其中一个是unix系统内置的,它是cron。 .您可以在系统手册中阅读它。您可以使用 whenever gem 轻松管理它.主要缺点是您需要访问系统的 cron,这在非裸机(例如 Heroku 等平台即服务主机)上可能很重要。

您还应该看看 clockwork它不依赖于系统的 cron。它使用的方法让您有一个始终运行的单独进程,并密切关注定义的任务。

在第二种方法(有一个单独的进程)中,您需要记住,耗时的指令可能会“锁定”进程并推迟其他任务。在这种情况下,您可能希望使用后台处理,例如 sidekiqdelayed_job .这个想法是使用一个进程在特定时间安排任务,并在任务出现在队列中时使用另一个进程来处理这些任务。

2: The external API has different domain models and a different domain-specific language than my application. How can I map the different models without changes in Active Record?

您需要创建一个客户端来使用 API 并将其响应映射到应用程序中的模型中。这样,您就不需要使模型的方案依赖于 API 方案。看看resource_kit gem - 这是一个使用这种方法的示例解决方案。

关于ruby-on-rails - 基于间隔的API访问和处理不同的DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821668/

相关文章:

ruby-on-rails - 使用Rails 5.2 ActiveStorage创建和保存pdf,然后附加到电子邮件

ruby-on-rails - "PG DuplicateTable: Error Relation "产品 "already exists"- Heroku 数据库 :migrate attempt

python - 尝试删除要素服务 Python API 1.7 for ArcGIS 中的要素时出现错误消息

json - Rails JSON 请求未正确解析为 post 参数

ruby-on-rails - 从 ActiveResource 请求中删除 .xml 扩展名

api - 如何以编程方式下载美国银行交易记录?

ruby-on-rails - 如何解决 Heroku 上未初始化常量 Rake::DSL 问题?

ruby-on-rails - 由于子域而无法使用 VMWare 访问 Rails 应用程序?

python - 在 JSON 文件中搜索特定值,python

php - 如何将数组的json对象转换为php数组