【发布时间】:2015-02-02 15:26:10
【问题描述】:
我正在使用最新版本的 rails 和 ruby。通过一个表单,我导入一个 CSV,然后触发一个异步作业(我为此使用 gem https://github.com/brandonhilkert/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
这是我的控制器操作:
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
【问题讨论】:
-
不确定 Sucker_punch 是如何工作的,但我知道你可以在 sidekiq 中做一些会触发回调的事情:github.com/mperham/sidekiq/wiki/Notifications
标签: ruby ruby-on-rails-4 rails-activejob sucker-punch