(这个问题是如何处理 Rails App 的长请求以便其他用户不会延迟太多的后续问题? )
用户向我的 Rails 应用程序提交一个答案,它会在后端被检查长达 10 秒。这会导致所有其他用户的延迟,因此我正在尝试使用延迟作业gem 将检查移至 Worker 进程。Worker 代码将结果返回给控制器。但是,控制器没有意识到它应该耐心等待结果,因此会导致错误。
如何让控制器等待结果并让应用程序的其余部分同时处理简单的请求?
在 Javascript 中,人们会使用回调来调用函数而不是返回值。我应该在 Ruby 中做同样的事情并从 Worker 回调控制器吗?
更新:
或者,我如何从 Worker 调用控制器方法?然后我可以在完成后调用相关操作。
这是相关代码:
控制器:
def submit
question = Question.find params[:question]
user_answer = params[:user_answer]
@result, @other_stuff = SubmitWorker.new.check(question, user_answer)
render_ajax
end
submit_worker.rb :
class SubmitWorker
def check
#lots of code...
end
handle_asynchronously :check
end