我有以下系统:我的Rails服务器向Flask服务器发出命令,并立即以状态200响应最新消息。此后Flask服务器运行具有一些耗时功能的后台任务。片刻之后,它会产生一些结果,并旨在通过HTTP将数据发送回Rails服务器(参见图)
每个Flask数据部分可能会影响多个Rails模型(User
,Post
等)。在这里,我面临两个问题:
答案 0 :(得分:1)
这听起来很像是您的标准Webhook流程。 Rails用GET或POST请求戳Flask,过一会后Flask戳回。
例如,假设我们有报告,创建报告后,我们需要烧瓶来验证报告:
class ReportsController
# POST /reports
def create
@report = Report.new(report_params)
if @report.save
FlaskClient.new.verify(report) # this could be delegated to a background job
redirect_to @report
else
render :new
end
end
# PATCH /reports/:id/verify
def verify
# process request from flask
end
end
class FlaskClient
include Httparty
base_uri 'example.com/api'
format 'json'
def verify(report)
self.class.post('/somepath', data: { id: report.id, callback_url: "/reports/#{report.id}/verify", ... })
end
end
当然,Rails应用程序实际上并不知道Flask何时响应或Flask与后台服务是否不同。它只是发送并响应http请求。而且您绝对不希望rails到处走动,因此请保存您所拥有的内容,然后再由钩子更新数据。
如果必须在Rails端更新UI而不需要用户手动刷新,则可以使用ActionCable形式的轮询或Websocket。