![](/img/trans.png)
[英]How to process queue sequentially in Redis and SideKiq in Rails?
[英]Rails Sidekiq Queue size not working
我有一个有2个工作的Rails应用程序(ImportCsvJob和ProcessCsvJob)。 这样我就可以在应用程序中明显暗示队列中还有作业,我有此帮助程序方法(在application_helper.rb内部):
module ApplicationHelper
def queued_job_count
Sidekiq::Queue.new.size
end
end
然后,在索引控制器上使用它,然后将其传递到视图以进行处理并在应用程序中提供可视提示。
def index
@still_have_jobs = !queued_job_count.zero?
end
但是,当我还有1个后台作业(ImportCsvJob)时,此方法起作用,但是当我添加(ProcessCsvJob)时,它不再起作用。
import_csv_job.rb
require 'open-uri'
class ImportCsvJob < ActiveJob::Base
queue_as :default
def perform(csv_record)
csv_record[:object_changes] = ApplicationController.helpers.generate_hash(csv_record[:object_changes])
ObjectRecord.create(csv_record)
end
end
process_csv_job.rb
class ProcessCsvJob < ActiveJob::Base
queue_as :default
def perform(csv_path)
csv_file = open(csv_path,'rb:UTF-8')
options = {
row_sep: :auto, col_sep: ",",
user_provided_headers: [:object_id, :object_type, :timestamp, :object_changes],
remove_empty_values: true,
headers_in_file: true
}
SmarterCSV.process(csv_file, options) do |array|
ImportCsvJob.perform_later(array.first)
end
end
end
最后,在模型中将其称为:
ProcessCsvJob.perform_later(gdrive.uploaded_file_link)
当我尝试使用Sidekiq :: Queue.new.size在Rails控制台中调试时,它仍然给出0。
正在运行:
redis-server
bundle exec sidekiq
正在执行的作业不再排队。 Sidekiq进程已将其从队列中弹出并正在执行。 队列为空,但作业尚未完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.