The project is in a healthy, maintained state
Provides methods to spawn a background process for ActiveRecord. It is recommended to use it with Threads if you have long-taking functions on the database side.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

 Project Readme

DbBackgroundJob

Provides methods to spawn a background process for ActiveRecord. It is recommended to use it with Threads if you have long-taking functions on the database side.

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add db_background_job

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install db_background_job

Usage

For example, we have a 500k list of items, lets create 50 extra database connections with Threads and Process to finish job faster on the database side.

threads = []
# lets create 50 extra database connections
max_workers = 50
    
items&.each do |item|  
  if(Thread.list.count % max_workers != 0)
    thread = Thread.new do
      begin
        DbBackgroundJob.spawn_and_wait do
          # To something here
        end
      rescue => error
        Rails.logger.error error
      end
    end
    threads << thread
  else
    threads.each(&:join)
    thread = Thread.new do
      begin
        DbBackgroundJob.spawn_and_wait do
          # To Something here
        end
      rescue => error
        Rails.logger.error error
      end
    end
    threads << thread
  end
end
threads.each(&:join)

In another example, we have a list of items and a Postgres database function that contains heavy calculations and updates ( SELECT update_and_calculate_sums(ARRAY[item_id]) ). To avoid locks in the database we do for example 50(workers/extra sessions) with 250 batches/item_id.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/dragonwebeu/db_background_job.

License

The gem is available as open source under the terms of the MIT License.