mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
6bad959565
I'm working on a standardized error reporting interface (https://github.com/rails/rails/issues/43472) and it has the same need for a `context` than Active Record's query logs. Just like query logs, when reporting an error you want to know what the current controller or job is, etc. So by extracting it we can allow both API to use the same store.
63 lines
1.6 KiB
Ruby
63 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "active_support/rescuable"
|
|
require "active_job/arguments"
|
|
|
|
module ActiveJob
|
|
module Execution
|
|
extend ActiveSupport::Concern
|
|
include ActiveSupport::Rescuable
|
|
|
|
# Includes methods for executing and performing jobs instantly.
|
|
module ClassMethods
|
|
# Performs the job immediately.
|
|
#
|
|
# MyJob.perform_now("mike")
|
|
#
|
|
def perform_now(...)
|
|
job_or_instantiate(...).perform_now
|
|
end
|
|
|
|
def execute(job_data) # :nodoc:
|
|
ActiveJob::Callbacks.run_callbacks(:execute) do
|
|
job = deserialize(job_data)
|
|
job.perform_now
|
|
end
|
|
end
|
|
end
|
|
|
|
# Performs the job immediately. The job is not sent to the queuing adapter
|
|
# but directly executed by blocking the execution of others until it's finished.
|
|
# +perform_now+ returns the value of your job's +perform+ method.
|
|
#
|
|
# class MyJob < ActiveJob::Base
|
|
# def perform
|
|
# "Hello World!"
|
|
# end
|
|
# end
|
|
#
|
|
# puts MyJob.new(*args).perform_now # => "Hello World!"
|
|
def perform_now
|
|
# Guard against jobs that were persisted before we started counting executions by zeroing out nil counters
|
|
self.executions = (executions || 0) + 1
|
|
|
|
deserialize_arguments_if_needed
|
|
|
|
_perform_job
|
|
rescue Exception => exception
|
|
rescue_with_handler(exception) || raise
|
|
end
|
|
|
|
def perform(*)
|
|
fail NotImplementedError
|
|
end
|
|
|
|
private
|
|
def _perform_job
|
|
ActiveSupport::ExecutionContext[:job] = self
|
|
run_callbacks :perform do
|
|
perform(*arguments)
|
|
end
|
|
end
|
|
end
|
|
end
|