Don*_*ato 6 ruby ruby-on-rails sidekiq
用户可以通过由控制器操作处理的 Web 界面在我的系统中上传多个文件。
def import
paths = params[:files].map(&:path) if params[:files].present?
if paths
@results = MyRecord.create_from paths
end
redirect_to confirmation_my_records_path
end
class MyRecord < ActiveRecord::Base
def self.create_from(paths)
paths.each do |path|
MyRecordWorker.perform path
end
end
end
works/my_record_worker.rb
class MyRecordWorker
include Sidekiq::Worker
def perform(path)
# each time this is run, it is no I/O, just expensive math calculations that take minutes
collection = ExpensiveOperation.new(path).run
if collection && collection.any?
save_records(collection)
else
[]
end
end
end
Run Code Online (Sandbox Code Playgroud)
因为 sidekiq 作业将在后台运行,我如何通过确认页面通知用户作业已完成?我们不知道作业何时完成,因此 Rails 请求和响应周期无法确定加载确认页面时的任何内容。确认页面是否应该只说“正在处理...”然后让 Faye 在工作完成后更新页面?
RecordJobs向您的应用程序添加一个模型,用于存储谁上传了记录、记录数量、上传时间等。
record_job每次有人上传新记录并将其传递id给工作人员时,都会创建一个新记录。工作人员可以更新该实例以指示其进度。
同时,应用程序可以查询现有record_job并显示其进度。这可以在用户重新加载页面时完成,通过主动轮询或使用网络套接字(取决于您的需要)。
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |