I first encountered the "solid queue" gem when it was announced to be shipped with Rails 8 as the default active job backend.
It is DB-based and compatible with Rails multi-threading. The debugging of active job issues is simpler with its enhanced logging and queue data persisted in the database.
Since Rails 8 is currently under development, I decided to try it with a Rails 7 application.
Setup
It is plug-and-play, with 3 simple steps below.
-
Install the gem
gem "solid_queue" -
Install and run its migration
$ rails solid_queue:install:migrations $ rails db:migrate -
Update queue adapter in configuration
config.active_job.queue_adapter = :solid_queue -
To test it, you can run this command
$ bundle exec rake solid_queue:start
Using it in Production
-
There are many ways to manage the solid queue processes. I choose to use supervisor on a Ubuntu server.
$ sudo apt update && sudo apt install supervisor -
This can be done by creating a configuration file
$ sudo pico /etc/supervisor/conf.d/rails-solid-queue.conf[program:rails-solid-queue] process_name=%(program_name)s_%(process_num)02d directory=/path/to/app command=/path/to/bundle exec rake solid_queue:start environment=RAILS_ENV=production autostart=true autorestart=true stopasgroup=true killasgroup=true user=user numprocs=1 redirect_stderr=true stdout_logfile=/path/to/log stopwaitsecs=3600 -
Then load and start the configuration
$ sudo supervisorctl reread $ sudo supervisorctl update
Integrate it with the Capistrano deployment
-
I use Capistrano to deploy the demo app. So the supervisor-monitored processes must be restarted when I deploy new codes.
-
The following codes are added in my deploy.rb to perform the restart after the deployment.
# etc # restart supervisor namespace :deploy do desc 'Restart supervisor rails-solid-queue' task :restart_application do on roles(:app) do execute :sudo, 'supervisorctl restart rails-solid-queue:*' end end after :finished, :restart_application end -
That is all the setup needed to deploy Solid Queue in production.
