Это похоже на ваш стандартный процесс webhook. Rails высовывает Flask с помощью запроса 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 без необходимости обновления пользователем sh вручную вы можете использовать опрос или веб-сокеты в виде ActionCable.