SolidQueueConfiguration » History » Version 1
Nishida Yuya, 2025-07-25 01:00
| 1 | 1 | Nishida Yuya | h2. Solid Queue configuration |
|---|---|---|---|
| 2 | |||
| 3 | "Solid Queue":https://github.com/rails/solid_queue is a Database-backed Active Job backend. I've tested to following install and configuration steps on a fresh Debian/GNU Linux 12 with Redmine 6.0.6 and Solid Queue 1.2.0. |
||
| 4 | |||
| 5 | h3. 1. Install solid_queue |
||
| 6 | |||
| 7 | # Add the gem as dependency in @Gemfile.local@ file. If the file doesn't exist, you need to create it. |
||
| 8 | <pre> |
||
| 9 | gem 'solid_queue' |
||
| 10 | </pre> |
||
| 11 | # Run @bundle install@ to install the dependency |
||
| 12 | |||
| 13 | h3. 2. Configure Redmine database to setup tables for solid_queue (single database case) |
||
| 14 | |||
| 15 | Run following to |
||
| 16 | |||
| 17 | <pre> |
||
| 18 | bin/rails solid_queue:install |
||
| 19 | </pre> |
||
| 20 | |||
| 21 | Write db/migrate/20250701000000_add_solid_queue_tables.rb as following: |
||
| 22 | |||
| 23 | <pre> |
||
| 24 | cat <<EOF > db/migrate/20250701000000_add_solid_queue_tables.rb |
||
| 25 | class AddSolidQueueTables < ActiveRecord::Migration[7.2] |
||
| 26 | def change |
||
| 27 | $(sed -e '1 d' -e '$ d' db/queue_schema.rb | sed -e 's|^ | |') |
||
| 28 | end |
||
| 29 | end |
||
| 30 | EOF |
||
| 31 | </pre> |
||
| 32 | |||
| 33 | h3. 3. Configure Redmine to use @solid_queue@ as backend |
||
| 34 | |||
| 35 | # Create @config/additional_environment.rb@ file if the file does not exist by copying the existing example file: |
||
| 36 | <pre> |
||
| 37 | cp config/additional_environment.rb.example config/additional_environment.rb |
||
| 38 | </pre> |
||
| 39 | # Add the below config line to the file: |
||
| 40 | <pre> |
||
| 41 | config.active_job.queue_adapter = :solid_queue |
||
| 42 | </pre> |
||
| 43 | # Restart Redmine to reload the configuration file. |
||
| 44 | |||
| 45 | h3. 4. Test the configuration |
||
| 46 | |||
| 47 | # Browse to Information tab from Redmine Administration page and check the mailer queue value: |
||
| 48 | <pre> |
||
| 49 | Mailer queue ActiveJob::QueueAdapters::SolidQueueAdapter |
||
| 50 | </pre> |
||
| 51 | # Perform some actions in Redmine in order to trigger some notifications emails. In this step, Redmine only pushes the background jobs to SolidQueue backend. |
||
| 52 | # Temporary start Solid Queue supervisor in order to process the queue and send the emails: |
||
| 53 | <pre> |
||
| 54 | RAILS_ENV=production bin/jobs start |
||
| 55 | </pre> |
||
| 56 | |||
| 57 | Output example of startup process: |
||
| 58 | <pre> |
||
| 59 | I, [2025-07-24T11:53:53.590961 #24399] INFO -- : SolidQueue-1.2.1 Started Supervisor (40.1ms) pid: 24399, hostname: "vagrant", process_id: 5, name: "supervisor-9318434042b90e70bf75" |
||
| 60 | I, [2025-07-24T11:53:53.642738 #24405] INFO -- : SolidQueue-1.2.1 Started Dispatcher (43.7ms) pid: 24405, hostname: "vagrant", process_id: 6, name: "dispatcher-6709740a9c0eb52cc355", polling_interval: 1, batch_size: 500, concurrency_maintenance_interval: 600 |
||
| 61 | I, [2025-07-24T11:53:53.647923 #24408] INFO -- : SolidQueue-1.2.1 Started Worker (42.7ms) pid: 24408, hostname: "vagrant", process_id: 7, name: "worker-beadd9266ccccca675d0", polling_interval: 0.1, queues: "*", thread_pool_size: 3 |
||
| 62 | I, [2025-07-24T11:53:53.686615 #24412] INFO -- : SolidQueue-1.2.1 Started Scheduler (76.3ms) pid: 24412, hostname: "vagrant", process_id: 8, name: "scheduler-b85c19cbe69292d9a6af", recurring_schedule: ["clear_solid_queue_finished_jobs"] |
||
| 63 | </pre> |
||
| 64 | |||
| 65 | Output example of job processing: |
||
| 66 | <pre> |
||
| 67 | I, [2025-07-24T11:54:50.951148 #24408] INFO -- : [ActiveJob] [Mailer::DeliveryJob] [d02bcf2d-73a3-42e9-a0fb-2832679cfc4b] Performing Mailer::DeliveryJob (Job ID: d02bcf2d-73a3-42e9-a0fb-2832679cfc4b) from SolidQueue(mailers) enqueued at 2025-07-24T11:54:50.682261303Z with arguments: "Mailer", "issue_edit", "deliver_now", {:args=>[#<GlobalID:0x00007a885a2747e8 @uri=#<URI::GID gid://redmine-app/User/1>>, #<GlobalID:0x00007a885a2aff78 @uri=#<URI::GID gid://redmine-app/Journal/1>>]} |
||
| 68 | I, [2025-07-24T11:54:51.421949 #24408] INFO -- : [ActiveJob] [Mailer::DeliveryJob] [d02bcf2d-73a3-42e9-a0fb-2832679cfc4b] Performed Mailer::DeliveryJob (Job ID: d02bcf2d-73a3-42e9-a0fb-2832679cfc4b) from SolidQueue(mailers) in 559.55ms |
||
| 69 | </pre> |
||
| 70 | # If everything went well, stop the command. |
||
| 71 | |||
| 72 | h3. 5. Configure Solid Queue supervisor to run as a system service |
||
| 73 | |||
| 74 | # Write @/etc/systemd/system/redmine_solid_queue.service@ file. example: |
||
| 75 | <pre> |
||
| 76 | [Unit] |
||
| 77 | Description=Solid Queue for Redmine |
||
| 78 | After=network.target nss-lookup.target remote-fs.target |
||
| 79 | |||
| 80 | [Service] |
||
| 81 | Type=simple |
||
| 82 | User=vagrant |
||
| 83 | Group=vagrant |
||
| 84 | WorkingDirectory=/opt/redmine |
||
| 85 | Environment=RAILS_ENV=production |
||
| 86 | ExecStart=/home/vagrant/.local/share/mise/shims/bundle exec bin/jobs start |
||
| 87 | TimeoutSec=300 |
||
| 88 | ExecReload=/bin/kill -TSTP ${MAINPID} |
||
| 89 | ExecStop=/bin/kill -INT ${MAINPID} |
||
| 90 | RestartSec=1 |
||
| 91 | Restart=on-failure |
||
| 92 | SyslogIdentifier=redmine_solid_queue |
||
| 93 | |||
| 94 | [Install] |
||
| 95 | WantedBy=multi-user.target |
||
| 96 | </pre> |
||
| 97 | # Enable and start the service: |
||
| 98 | <pre> |
||
| 99 | sudo systemctl enable redmine_solid_queue.service |
||
| 100 | sudo systemctl start redmine_solid_queue.service |
||
| 101 | </pre> |
||
| 102 | # Test again the email notifications |