【发布时间】:2015-03-25 17:19:32
【问题描述】:
我想在我的应用程序中创建一个 API 端点,它接收数据并使用它执行复杂、耗时的操作,但只有在返回数据已收到之后。
就像这样,我希望能够做这样的事情:
def action
render json: { data_received: params[:whatever].present? }
perform_calculations( params[:whatever] )
end
不幸的是,据我了解,Ruby/Rails 是同步的,并且要求控制器操作 end 在 render/redirect/head 某种声明中。
通常,我会考虑使用后台工作人员来完成此任务,如下所示:
def action
DelayedJobActionPerformer.perform_later(params[:whatever])
render { data_received: params[:whatever].present? }
end
但是,一个工人(在 Heroku 上)每月要花相当多的钱来购买这样的初级应用程序,我正在寻找替代方案。除了后台工作人员之外,您是否可以考虑从操作中返回并然后执行该行为?
我正在考虑可能创建一个单独的 Node 应用程序或可以启动一个动作然后响应的东西,但这感觉很荒谬。我想我的架构会涉及一个主要的 Rails 应用程序,它执行大部分行为,以及一个轻量级的 Node 应用程序,它充当 API 端点,它可以接收请求,响应它已被接收,然后发送数据由第一个 Rails 应用程序或其他应用程序执行。但这感觉有点过分了,也像是把问题推到了后面。
无论如何,无论我最终是否不得不购买一个工人或几个工人,我都想知道这种事情是否可行,以及使用外部 API 作为准工人是否有意义(尤其是考虑到打破应用程序问题的总体趋势)。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 asynchronous heroku delayed-job