Ruby Background Jobs

For long running tasks or scheduled tasks we use Sidekiq. Tasks that are compute-heavy, run for very long time or have memory leaks, are executed in a separate process which is called from sidekiq.

Sidekiq

Sidekiq is threaded background jobs processor. This makes it very efficient at processing small, IO-heavy tasks. For scheduled tasks we use Sidekiq-cron.

Running tasks in a separate process

To call a task in separate process use Open3 module from stdlib:

command = "./bin/rails r -e #{Rails.env} 'SomeLongRunning.code'"

Open3.popen3(command) do |_stdin, _stdout, stderr, wait_thr|
  return_value = wait_thr.value

  raise stderr.read unless return_value.success?
end