gpt4 book ai didi

ruby - Rails 异步作业如何让 Controller 知道它已完成?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:24 25 4
gpt4 key购买 nike

我使用的是最新版本的 rails 和 ruby​​。通过一个表单,我导入一个 CSV,然后触发一个异步作业(我为此使用 gem https://github.com/brandonhilkert/sucker_punch)读取文件并处理数据。

总而言之,一切正常,但是:

我的问题是,我如何让 Controller 知道后台作业何时完成?我想使用 Flash 通知进行重定向,但显然我不应该从模型中这样做...我可以在这里做什么?

这是我的 sucker_punch 工作:

#app/jobs/import_job.rb

class ImportJob
include SuckerPunch::Job

def perform(import_file)
ActiveRecord::Base.connection_pool.with_connection do
ModelName.import_from_csv(import_file)
end
end
end

这是我的 Controller 操作:

def import
ImportJob.new.async.perform(import_file)
redirect_to list_data_path, notice: 'Data being imported...'
# i get sent to list_data_path and i stay there even though the background job already finished successfully
end

最佳答案

对于这种任务,我会创建一个模型 (ActiveRecord) 来保存作业的状态(等待、处理、完成,也许还有一个进度),并从 Controller 查询模型以呈现给使用导入作业状态.

关于ruby - Rails 异步作业如何让 Controller 知道它已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281025/

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