Solid Queue brought back the Async Mode in its recent release. The mode runs all Solid Queue entities (Supervisor, Worker, Dispatcher, Scheduler) in the same process, with the intention of reducing its memory usage. This makes its deployment in resource-constrained environments friendlier.
Setup
1) Update the solid queue gem to v1.3.0 or above.
2) We need to include a new flag (mode=aync) to enable this feature. In this example, we are using supervisor, and this can be done by updating the command.
[program:my-app-solid-queue]
...
directory=/path/to/app/current
command=/path/to/bundle exec ./bin/jobs start --mode=async
environment=RAILS_ENV=production
...
3) Then we can reread and update the supervisor.
Validate
1) You can validate the current mode by checking the Solid Queue supervisor's name.
# async
user 1565540 solid-queue-async-supervisor(1.3.0): supervising 17576, 17584, 17592
# fork
user 431740 solid-queue-fork-supervisor(1.3.0): supervising 431785, 431789, 431793
user 431785 solid-queue-dispatcher(1.3.0): dispatching every 1 seconds
user 431789 solid-queue-worker(1.3.0): waiting for jobs in *
user 431793 solid-queue-scheduler(1.3.0): scheduling some_jobs