In a web application you sometimes have tasks that can not be processed during a request but need to go to the background.
There are several gems that help to you do that, like 
  Sidekiq
  
    Show archive.org snapshot
  
 or 
  Resque
  
    Show archive.org snapshot
  
.
With newer Rails you can also use 
  ActiveJob
  
    Show archive.org snapshot
  
 as interface for a background processing library. See 
  here
  
    Show archive.org snapshot
  
 for a list of supported queueing adapters.
For development and test it also brings its own queue adapters (
  async
  
    Show archive.org snapshot
  
, 
  inline
  
    Show archive.org snapshot
  
 and 
  test
  
    Show archive.org snapshot
  
). Note: For production use they don't recommend using these.
Using ActiveJob brings the advantage that the underlying background processing library can very easily be switched if there is the need to.
Code that all worker classes need can go to a ApplicationJob class, similar to the use of ApplicationRecord in Active Record (this is not enforced):
app/jobs/application_job.rb:
class ApplicationJob < ActiveJob::Base
  # common config goes here  
end
Regular Workers would then look like this (e.g. app/jobs/my_api_fetcher_job.rb):
class MyApiFetcherJob < ApplicationJob
  queue_as :default
  def perform(api_token, options)
    MyApiClient.new(api_token).fetch(options)
  end
end
and could be called with MyApiFetcherJob.perform_later('super-secret', options).
To define which queue adapter is used, set the config in your application.rb (or e.g. production.rb, if you prefer to have different adapters for different environments):
config.active_job.queue_adapter = :sidekiq
To set specific adapters in tests, you can create a spec/support/active_job.rb with:
RSpec.configure do |config|
  config.before(:suite) do
    ActiveJob::Base.queue_adapter = :test
  end
end
and a features/support/active_job.rb with:
# Jobs should be worked off immediately in tests
Rails.application.config.active_job.queue_adapter = :inline