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