gpt4 book ai didi

ruby-on-rails - 如何让 Controller 等待延迟作业,而应用程序的其余部分继续运行?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:15 25 4
gpt4 key购买 nike

(此问题是 How do I handle long requests for a Rails App so other users are not delayed too much? 的后续问题)

用户向我的 Rails 应用程序提交了一个答案,它会在后端进行最多 10 秒的检查。这会导致所有其他用户延迟,所以我正在尝试 delayed_job gem 将检查移至工作进程。 Worker 代码将结果返回给 Controller 。然而, Controller 没有意识到它应该耐心地等待结果,所以它导致了一个错误。

如何让 Controller 等待结果,同时让应用程序的其余部分处理简单的请求?
在 Javascript 中,人们会使用回调来调用函数而不是返回值。我应该在 Ruby 中做同样的事情并从 Worker 回调 Controller 吗?

更新:
或者,如何从 Worker 调用 Controller 方法?然后我可以在完成后调用相关操作。

这是相关代码:

Controller :

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

最佳答案

使用 DJ 来卸载工作是完全正常的,但是让 Controller 等待响应反而失去了意义。

您可以在 check 方法的末尾添加某种形式的回调,以便在作业完成时通知您的用户。

您可以在这个问题中找到关于执行通知的一些讨论:push-style notifications simliar to Facebook with Rails and jQuery

或者,您可以让浏览器定期调用 Controller 操作来检查作业的结果——理想情况下,结果应该是一个 ActiveRecord 对象。同样,您可以在这个问题中找到关于定期 javascript 的讨论:Rails 3 equivalent for periodically_call_remote

关于ruby-on-rails - 如何让 Controller 等待延迟作业,而应用程序的其余部分继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com