module Rage::Deferred
def self.__backend
- Private: -
def self.__backend @__backend ||= Rage.config.deferred.backend end
def self.__initialize
- Private: -
def self.__initialize __middleware_chain __load_tasks end
def self.__load_tasks
- Private: -
def self.__load_tasks current_time = Time.now.to_i __backend.pending_tasks.each do |task_id, task_wrapper, publish_at| publish_in = publish_at - current_time if publish_at __queue.schedule(task_id, task_wrapper, publish_in:) rescue => e puts "ERROR: Failed to load deferred task #{task_id}: #{e.class} (#{e.message}). Removing task from the queue." __backend.remove(task_id) end end
def self.__middleware_chain
- Private: -
def self.__middleware_chain @__middleware_chain ||= MiddlewareChain.new( enqueue_middleware: Rage.config.deferred.enqueue_middleware.objects, perform_middleware: Rage.config.deferred.perform_middleware.objects ) end
def self.__queue
- Private: -
def self.__queue @__queue ||= Rage::Deferred::Queue.new(__backend) end
def self.wrap(instance, delay: nil, delay_until: nil)
- Example: Schedule an arbitrary method to be called in the background -
Parameters:
-
delay_until(Time, nil) -- the specific time when the task should be executed -
delay(Integer, nil) -- the delay in seconds before the task is executed -
instance(Object) -- the instance to wrap
def self.wrap(instance, delay: nil, delay_until: nil) Rage::Deferred::Proxy.new(instance, delay:, delay_until:) end