namespace :counts do desc 'Process the persistent Counts export queue (run under a process supervisor)' task export_worker: :environment do stopping = false ['TERM', 'INT'].each { |signal| Signal.trap(signal) { stopping = true } } at_exit do path = CountsExportJobs.directory.join("#{ CountsExportJobs.worker_id }.json") File.unlink(path) if path.exist? end until stopping worked = Rails.application.executor.wrap { CountsExportJobs.work_one } sleep(1) unless worked end end end