我有一个面向客户的网站,运行Ruby on Rails应用程序。用户下订单并使用一系列后台工作任务同步到内部ERP系统。每30分钟一次。
我们正在重建内部系统,作为RoR API样式的应用程序,因此Web应用程序基本上只会在保存订单时向内部应用程序发送api调用。使用类似ActiveResource或ROAR&延迟工作或其他。
但是,如果内部API由于某种原因而中断 - 在Web服务器上保存该客户订单的好策略是什么,然后在它可用时将其同步到API?它类似于iPhone / Android上发生的事情 - 它可以在本地保存信息并稍后将其同步到云API。除了客户端是RoR服务器应用程序。有没有现成的解决方案?或者我应该实现自己的"保存到本地数据库 - >当它回来时异步同步到API"型解决方案?
答案 0 :(得分:1)
是否有现成的解决方案?
没有
或者我应该实现自己的“保存到本地数据库 - >当它返回时异步同步到API”类型解决方案?
是。这是一个相对简单的迷你项目。事实上我昨天做了。花了几个小时。
对于本地存储,我使用postgresql(我在Heroku上托管)。
我使用NfpAdmin::ServiceRequest
记录来跟踪每次交易尝试的结果。它看起来像这样:
# == Schema Information
#
# Table name: nfp_admin_service_requests
#
# id :integer not null, primary key
# service_name :string
# status :string default("created")
# percent_complete :integer default(0)
# details :jsonb not null
# created_at :datetime not null
# updated_at :datetime not null
#
class NfpAdmin::ServiceRequest < ActiveRecord::Base
serialize :details, HashSerializer
validates :service_name,
:details,
presence: true
end
我使用CloudAMQP运行夜间工作并自然地使用我的真实service_name
:
NfpAdmin::ServiceRequest.where(service_name: 'foo').where.not(status: 'complete')
在jsonb
列(details
)中,我会跟踪该服务请求,结果,错误消息等的每个尝试事务。
目前,我从远程API(第三方)接收推送消息并执行拉取请求。 API允许从我的系统进行更新,但我的用例还没有调用它。
我运行了一系列自己的API Web服务,我在其中进行双向数据交换。