gpt4 book ai didi

c++ - Ruby on Rails 在后台工作 [resque + resque-status]

转载 作者:行者123 更新时间:2023-11-28 06:24:27 26 4
gpt4 key购买 nike

我正在使用 ruby​​ on rails 构建一个 webapp,它需要在后台运行 C++ exe 程序。我为此比较了 3 个最常用的 gem(Delayed_Jobs、Resque、Sidekiq),发现 resque 最适合我。

在 Countroller 中我有这样的创建方法

    def create
@model = Model.create(model_params)
# resque processe the file from the @model
Resque.enqueue(JobWorker, @model.file.url)
redirect_to model_path(@model.id)
end

我在 Worker 类中有

    class JobWorker
@queue = :file
def perform file_to_process
# calling time consuming C++ here which generates 2 image files.
system('my_file_processing_program "#{file_to_process}"')
end
end

现在我的问题是我应该如何检测该作业是否已完成? 我想在 C++ 应用程序生成图像后将生成的图像文件发送到客户端。哪些用户可以查看/下载。

因为 redirect_to model_path(@model.id) 将在 Controller 中创建的 Resque.enqueue(JobWorker, @model.file.url) 之后返回。

我尝试使用 resque-status 但这需要在 Controller 中轮询以检查状态,例如...

    while status = Resque::Plugins::Status::Hash.get(job_id) and !status.completed? && !status.failed?
sleep 1
puts status.inspect
end

有什么建议吗?在此先感谢您...

最佳答案

如果你想像 faye( http://faye.jcoglan.com/ruby.html ) 这样的异步系统,那么你可以在进程完成时向前端发送消息。编写代码以在系统代码执行完毕后发布消息。

另一个简单的步骤(尽管对您来说可能不可行)是在流程结束时发送电子邮件。您可以向客户发送电子邮件,让他们知道“该过程已完成,请访问链接以查看结果。”

关于c++ - Ruby on Rails 在后台工作 [resque + resque-status],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752587/

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