From 658ea7d7e4c73991adfebab7d96adf961afac559 Mon Sep 17 00:00:00 2001 From: Felix Eckhofer <felix@eckhofer.com> Date: Thu, 2 Jan 2025 19:14:12 +0100 Subject: [PATCH] Update ruby to 3.3 and run bundle update This includes a two-part update of solid_queue via 0.6.0 as requested in the changelog. --- .devcontainer/devcontainer.json | 2 +- .tool-versions | 2 +- Dockerfile | 2 +- Gemfile | 6 +- Gemfile.lock | 294 +++++++++--------- bin/jobs | 6 + config/environments/production.rb | 1 + config/{solid_queue.yml => queue.yml} | 4 +- config/recurring.yml | 10 + ...5729_create_recurring_tasks.solid_queue.rb | 21 ++ ...75730_add_name_to_processes.solid_queue.rb | 6 + ...02175731_make_name_not_null.solid_queue.rb | 17 + ...ng_tasks_static_to_not_null.solid_queue.rb | 6 + db/queue_schema.rb | 129 ++++++++ db/schema.rb | 20 +- 15 files changed, 374 insertions(+), 152 deletions(-) create mode 100755 bin/jobs rename config/{solid_queue.yml => queue.yml} (75%) create mode 100644 config/recurring.yml create mode 100644 db/migrate/20250102175729_create_recurring_tasks.solid_queue.rb create mode 100644 db/migrate/20250102175730_add_name_to_processes.solid_queue.rb create mode 100644 db/migrate/20250102175731_make_name_not_null.solid_queue.rb create mode 100644 db/migrate/20250102175732_change_solid_queue_recurring_tasks_static_to_not_null.solid_queue.rb create mode 100644 db/queue_schema.rb diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6f1bbaa..303c72b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ { "name": "Ruby", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/ruby:1-3.2-bookworm", + "image": "mcr.microsoft.com/devcontainers/ruby:1-3.3-bookworm", "containerEnv": { "VISUAL": "code --wait", diff --git a/.tool-versions b/.tool-versions index a1e3a5a..5aa8e0c 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -ruby 3.2.6 +ruby 3.3.6 diff --git a/Dockerfile b/Dockerfile index b79c39a..1a10fdb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax = docker/dockerfile:1 # Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile -ARG RUBY_VERSION=3.2.6 +ARG RUBY_VERSION=3.3.6 FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim AS base # Rails app lives here diff --git a/Gemfile b/Gemfile index a62c9c1..359c855 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source "https://rubygems.org" -ruby "3.2.6" +ruby "3.3.6" # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" gem "rails", "~> 7.1.2" @@ -54,7 +54,7 @@ group :test do gem "selenium-webdriver" end -gem "solid_queue" +gem "solid_queue", "~> 1.1" gem "httparty" gem "tailwindcss-rails", "~> 2.6" @@ -69,4 +69,4 @@ gem "telegram-bot-ruby", "~> 2.0" gem 'devise', '~> 4.9' -gem "crono", git: 'https://github.com/plashchynski/crono' #"~> 2.0" +gem "crono", "~> 2.1" diff --git a/Gemfile.lock b/Gemfile.lock index 4d44ae3..e03b73c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,42 +1,35 @@ -GIT - remote: https://github.com/plashchynski/crono - revision: 6bf1ec9cfd383265e5578e29c2a6cd706476ab91 - specs: - crono (2.0.1) - rails (>= 5.2.8) - GEM remote: https://rubygems.org/ specs: - actioncable (7.1.3.2) - actionpack (= 7.1.3.2) - activesupport (= 7.1.3.2) + actioncable (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.3.2) - actionpack (= 7.1.3.2) - activejob (= 7.1.3.2) - activerecord (= 7.1.3.2) - activestorage (= 7.1.3.2) - activesupport (= 7.1.3.2) + actionmailbox (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.3.2) - actionpack (= 7.1.3.2) - actionview (= 7.1.3.2) - activejob (= 7.1.3.2) - activesupport (= 7.1.3.2) + actionmailer (7.1.5.1) + actionpack (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.3.2) - actionview (= 7.1.3.2) - activesupport (= 7.1.3.2) + actionpack (7.1.5.1) + actionview (= 7.1.5.1) + activesupport (= 7.1.5.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -44,53 +37,57 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.3.2) - actionpack (= 7.1.3.2) - activerecord (= 7.1.3.2) - activestorage (= 7.1.3.2) - activesupport (= 7.1.3.2) + actiontext (7.1.5.1) + actionpack (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.3.2) - activesupport (= 7.1.3.2) + actionview (7.1.5.1) + activesupport (= 7.1.5.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.1.3.2) - activesupport (= 7.1.3.2) + activejob (7.1.5.1) + activesupport (= 7.1.5.1) globalid (>= 0.3.6) - activemodel (7.1.3.2) - activesupport (= 7.1.3.2) - activerecord (7.1.3.2) - activemodel (= 7.1.3.2) - activesupport (= 7.1.3.2) + activemodel (7.1.5.1) + activesupport (= 7.1.5.1) + activerecord (7.1.5.1) + activemodel (= 7.1.5.1) + activesupport (= 7.1.5.1) timeout (>= 0.4.0) - activestorage (7.1.3.2) - actionpack (= 7.1.3.2) - activejob (= 7.1.3.2) - activerecord (= 7.1.3.2) - activesupport (= 7.1.3.2) + activestorage (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activesupport (= 7.1.5.1) marcel (~> 1.0) - activesupport (7.1.3.2) + activesupport (7.1.5.1) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) base64 (0.2.0) bcrypt (3.1.20) - bigdecimal (3.1.7) + benchmark (0.4.0) + bigdecimal (3.1.9) bindex (0.8.1) - bootsnap (1.18.3) + bootsnap (1.18.4) msgpack (~> 1.2) - builder (3.2.4) + builder (3.3.0) capybara (3.40.0) addressable matrix @@ -100,11 +97,14 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.4) connection_pool (2.4.1) crass (1.0.6) - date (3.3.4) - debug (1.9.2) + crono (2.1.0) + rails (>= 5.2.8) + csv (3.3.2) + date (3.4.1) + debug (1.10.0) irb (~> 1.10) reline (>= 0.3.8) devise (4.9.4) @@ -114,10 +114,11 @@ GEM responders warden (~> 1.2.3) drb (2.2.1) - dry-core (1.0.1) + dry-core (1.0.2) concurrent-ruby (~> 1.0) + logger zeitwerk (~> 2.6) - dry-inflector (1.0.0) + dry-inflector (1.1.0) dry-logic (1.5.0) concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) @@ -134,17 +135,19 @@ GEM dry-inflector (~> 1.0) dry-logic (~> 1.4) zeitwerk (~> 2.6) - erubi (1.12.0) + erubi (1.13.1) et-orbi (1.2.11) tzinfo - faraday (2.9.0) - faraday-net_http (>= 2.0, < 3.2) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (3.1.0) - net-http - fugit (1.9.0) - et-orbi (~> 1, >= 1.2.7) + faraday (2.12.2) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-multipart (1.1.0) + multipart-post (~> 2.0) + faraday-net_http (3.4.0) + net-http (>= 0.5.0) + fugit (1.11.1) + et-orbi (~> 1, >= 1.2.11) raabro (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) @@ -152,27 +155,31 @@ GEM rails (>= 6.0.0) stimulus-rails turbo-rails - httparty (0.21.0) + httparty (0.22.0) + csv mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) - i18n (1.14.4) + i18n (1.14.6) concurrent-ruby (~> 1.0) - icalendar (2.10.1) + icalendar (2.10.3) ice_cube (~> 0.16) - ice_cube (0.16.4) + ostruct + ice_cube (0.17.0) ice_nine (0.11.2) - importmap-rails (2.0.1) + importmap-rails (2.1.0) actionpack (>= 6.0.0) activesupport (>= 6.0.0) railties (>= 6.0.0) - io-console (0.7.2) - irb (1.12.0) - rdoc + io-console (0.8.0) + irb (1.14.3) + rdoc (>= 4.0.0) reline (>= 0.4.2) - jbuilder (2.11.5) + jbuilder (2.13.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) - loofah (2.22.0) + json (2.9.1) + logger (1.6.4) + loofah (2.24.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -183,14 +190,15 @@ GEM marcel (1.0.4) matrix (0.4.2) mini_mime (1.1.5) - minitest (5.22.3) - msgpack (1.7.2) - multi_xml (0.6.0) + minitest (5.25.4) + msgpack (1.7.5) + multi_xml (0.7.1) + bigdecimal (~> 3.1) multipart-post (2.4.1) - mutex_m (0.2.0) - net-http (0.4.1) + mutex_m (0.3.0) + net-http (0.6.0) uri - net-imap (0.4.10) + net-imap (0.5.4) date net-protocol net-pop (0.1.2) @@ -199,119 +207,120 @@ GEM timeout net-smtp (0.5.0) net-protocol - nio4r (2.7.1) - nokogiri (1.16.5-aarch64-linux) + nio4r (2.7.4) + nokogiri (1.18.1-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.16.5-arm64-darwin) + nokogiri (1.18.1-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.5-x86_64-linux) + nokogiri (1.18.1-x86_64-linux-gnu) racc (~> 1.4) orm_adapter (0.5.0) - psych (5.1.2) + ostruct (0.6.1) + psych (5.2.2) + date stringio - public_suffix (5.0.5) - puma (6.4.2) + public_suffix (6.0.1) + puma (6.5.0) nio4r (~> 2.0) raabro (1.4.0) - racc (1.7.3) - rack (3.0.10) + racc (1.8.1) + rack (3.1.8) rack-session (2.0.0) rack (>= 3.0.0) - rack-test (2.1.0) + rack-test (2.2.0) rack (>= 1.3) - rackup (2.1.0) + rackup (2.2.1) rack (>= 3) - webrick (~> 1.8) - rails (7.1.3.2) - actioncable (= 7.1.3.2) - actionmailbox (= 7.1.3.2) - actionmailer (= 7.1.3.2) - actionpack (= 7.1.3.2) - actiontext (= 7.1.3.2) - actionview (= 7.1.3.2) - activejob (= 7.1.3.2) - activemodel (= 7.1.3.2) - activerecord (= 7.1.3.2) - activestorage (= 7.1.3.2) - activesupport (= 7.1.3.2) + rails (7.1.5.1) + actioncable (= 7.1.5.1) + actionmailbox (= 7.1.5.1) + actionmailer (= 7.1.5.1) + actionpack (= 7.1.5.1) + actiontext (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activemodel (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) bundler (>= 1.15.0) - railties (= 7.1.3.2) + railties (= 7.1.5.1) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.0) + rails-html-sanitizer (1.6.2) loofah (~> 2.21) - nokogiri (~> 1.14) - railties (7.1.3.2) - actionpack (= 7.1.3.2) - activesupport (= 7.1.3.2) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + railties (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) irb rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) zeitwerk (~> 2.6) - rake (13.2.0) - rdoc (6.6.3.1) + rake (13.2.1) + rdoc (6.10.0) psych (>= 4.0.0) - redis (5.2.0) + redis (5.3.0) redis-client (>= 0.22.0) - redis-client (0.22.2) + redis-client (0.23.0) connection_pool - regexp_parser (2.9.0) - reline (0.5.0) + regexp_parser (2.10.0) + reline (0.6.0) io-console (~> 0.5) responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.2.8) - strscan (>= 3.0.9) + rexml (3.4.0) rubyzip (2.3.2) - selenium-webdriver (4.19.0) + securerandom (0.4.1) + selenium-webdriver (4.27.0) base64 (~> 0.2) + logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - solid_queue (0.3.0) + solid_queue (1.1.2) activejob (>= 7.1) activerecord (>= 7.1) - concurrent-ruby (~> 1.2.2) - fugit (~> 1.9.0) + concurrent-ruby (>= 1.3.1) + fugit (~> 1.11.0) railties (>= 7.1) + thor (~> 1.3.1) sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) sprockets (>= 3.0.0) sqlite3 (1.7.3-aarch64-linux) sqlite3 (1.7.3-arm64-darwin) sqlite3 (1.7.3-x86_64-linux) - stimulus-rails (1.3.3) + stimulus-rails (1.3.4) railties (>= 6.0.0) - stringio (3.1.0) - strscan (3.1.0) - tailwindcss-rails (2.6.0-aarch64-linux) + stringio (3.1.2) + tailwindcss-rails (2.7.9-aarch64-linux) railties (>= 7.0.0) - tailwindcss-rails (2.6.0-arm64-darwin) + tailwindcss-rails (2.7.9-arm64-darwin) railties (>= 7.0.0) - tailwindcss-rails (2.6.0-x86_64-linux) + tailwindcss-rails (2.7.9-x86_64-linux) railties (>= 7.0.0) - telegram-bot-ruby (2.0.0) + telegram-bot-ruby (2.2.0) dry-struct (~> 1.6) faraday (~> 2.0) faraday-multipart (~> 1.0) zeitwerk (~> 2.6) - thor (1.3.1) - timeout (0.4.1) - turbo-rails (2.0.5) + thor (1.3.2) + timeout (0.4.3) + turbo-rails (2.0.11) actionpack (>= 6.0.0) - activejob (>= 6.0.0) railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uri (0.13.0) + uri (1.0.2) warden (1.2.9) rack (>= 2.0.9) web-console (4.2.1) @@ -319,14 +328,13 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webrick (1.8.1) - websocket (1.2.10) + websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.13) + zeitwerk (2.7.1) PLATFORMS aarch64-linux @@ -337,7 +345,7 @@ PLATFORMS DEPENDENCIES bootsnap capybara - crono! + crono (~> 2.1) debug devise (~> 4.9) hotwire-rails (~> 0.1.3) @@ -349,7 +357,7 @@ DEPENDENCIES rails (~> 7.1.2) redis (>= 4.0.1) selenium-webdriver - solid_queue + solid_queue (~> 1.1) sprockets-rails sqlite3 (~> 1.4) tailwindcss-rails (~> 2.6) @@ -358,7 +366,7 @@ DEPENDENCIES web-console RUBY VERSION - ruby 3.2.6p234 + ruby 3.3.6p108 BUNDLED WITH - 2.4.1 + 2.6.2 diff --git a/bin/jobs b/bin/jobs new file mode 100755 index 0000000..dcf59f3 --- /dev/null +++ b/bin/jobs @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby + +require_relative "../config/environment" +require "solid_queue/cli" + +SolidQueue::Cli.start(ARGV) diff --git a/config/environments/production.rb b/config/environments/production.rb index 8e5dae5..37fcc07 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -75,6 +75,7 @@ Rails.application.configure do # Use a real queuing backend for Active Job (and separate queues per environment). config.active_job.queue_adapter = :solid_queue + config.solid_queue.connects_to = { database: { writing: :queue } } # config.active_job.queue_name_prefix = "re_scheduled_production" config.action_mailer.perform_caching = false diff --git a/config/solid_queue.yml b/config/queue.yml similarity index 75% rename from config/solid_queue.yml rename to config/queue.yml index 5a43735..6dde0de 100644 --- a/config/solid_queue.yml +++ b/config/queue.yml @@ -4,8 +4,8 @@ # batch_size: 500 # workers: # - queues: "*" -# threads: 5 -# processes: 1 +# threads: 3 +# processes: <%= ENV.fetch("JOB_CONCURRENCY", 1) %> # polling_interval: 0.1 # # development: diff --git a/config/recurring.yml b/config/recurring.yml new file mode 100644 index 0000000..d045b19 --- /dev/null +++ b/config/recurring.yml @@ -0,0 +1,10 @@ +# production: +# periodic_cleanup: +# class: CleanSoftDeletedRecordsJob +# queue: background +# args: [ 1000, { batch_size: 500 } ] +# schedule: every hour +# periodic_command: +# command: "SoftDeletedRecord.due.delete_all" +# priority: 2 +# schedule: at 5am every day diff --git a/db/migrate/20250102175729_create_recurring_tasks.solid_queue.rb b/db/migrate/20250102175729_create_recurring_tasks.solid_queue.rb new file mode 100644 index 0000000..507c9e7 --- /dev/null +++ b/db/migrate/20250102175729_create_recurring_tasks.solid_queue.rb @@ -0,0 +1,21 @@ +# This migration comes from solid_queue (originally 20240719134516) +class CreateRecurringTasks < ActiveRecord::Migration[7.1] + def change + create_table :solid_queue_recurring_tasks do |t| + t.string :key, null: false, index: { unique: true } + t.string :schedule, null: false + t.string :command, limit: 2048 + t.string :class_name + t.text :arguments + + t.string :queue_name + t.integer :priority, default: 0 + + t.boolean :static, default: true, index: true + + t.text :description + + t.timestamps + end + end +end diff --git a/db/migrate/20250102175730_add_name_to_processes.solid_queue.rb b/db/migrate/20250102175730_add_name_to_processes.solid_queue.rb new file mode 100644 index 0000000..d5c14cd --- /dev/null +++ b/db/migrate/20250102175730_add_name_to_processes.solid_queue.rb @@ -0,0 +1,6 @@ +# This migration comes from solid_queue (originally 20240811173327) +class AddNameToProcesses < ActiveRecord::Migration[7.1] + def change + add_column :solid_queue_processes, :name, :string + end +end diff --git a/db/migrate/20250102175731_make_name_not_null.solid_queue.rb b/db/migrate/20250102175731_make_name_not_null.solid_queue.rb new file mode 100644 index 0000000..f56dd4d --- /dev/null +++ b/db/migrate/20250102175731_make_name_not_null.solid_queue.rb @@ -0,0 +1,17 @@ +# This migration comes from solid_queue (originally 20240813160053) +class MakeNameNotNull < ActiveRecord::Migration[7.1] + def up + SolidQueue::Process.where(name: nil).find_each do |process| + process.name ||= [ process.kind.downcase, SecureRandom.hex(10) ].join("-") + process.save! + end + + change_column :solid_queue_processes, :name, :string, null: false + add_index :solid_queue_processes, [ :name, :supervisor_id ], unique: true + end + + def down + remove_index :solid_queue_processes, [ :name, :supervisor_id ] + change_column :solid_queue_processes, :name, :string, null: true + end +end diff --git a/db/migrate/20250102175732_change_solid_queue_recurring_tasks_static_to_not_null.solid_queue.rb b/db/migrate/20250102175732_change_solid_queue_recurring_tasks_static_to_not_null.solid_queue.rb new file mode 100644 index 0000000..325320a --- /dev/null +++ b/db/migrate/20250102175732_change_solid_queue_recurring_tasks_static_to_not_null.solid_queue.rb @@ -0,0 +1,6 @@ +# This migration comes from solid_queue (originally 20240819165045) +class ChangeSolidQueueRecurringTasksStaticToNotNull < ActiveRecord::Migration[7.1] + def change + change_column_null :solid_queue_recurring_tasks, :static, false, true + end +end diff --git a/db/queue_schema.rb b/db/queue_schema.rb new file mode 100644 index 0000000..85194b6 --- /dev/null +++ b/db/queue_schema.rb @@ -0,0 +1,129 @@ +ActiveRecord::Schema[7.1].define(version: 1) do + create_table "solid_queue_blocked_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.string "concurrency_key", null: false + t.datetime "expires_at", null: false + t.datetime "created_at", null: false + t.index [ "concurrency_key", "priority", "job_id" ], name: "index_solid_queue_blocked_executions_for_release" + t.index [ "expires_at", "concurrency_key" ], name: "index_solid_queue_blocked_executions_for_maintenance" + t.index [ "job_id" ], name: "index_solid_queue_blocked_executions_on_job_id", unique: true + end + + create_table "solid_queue_claimed_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.bigint "process_id" + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_claimed_executions_on_job_id", unique: true + t.index [ "process_id", "job_id" ], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id" + end + + create_table "solid_queue_failed_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.text "error" + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_failed_executions_on_job_id", unique: true + end + + create_table "solid_queue_jobs", force: :cascade do |t| + t.string "queue_name", null: false + t.string "class_name", null: false + t.text "arguments" + t.integer "priority", default: 0, null: false + t.string "active_job_id" + t.datetime "scheduled_at" + t.datetime "finished_at" + t.string "concurrency_key" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "active_job_id" ], name: "index_solid_queue_jobs_on_active_job_id" + t.index [ "class_name" ], name: "index_solid_queue_jobs_on_class_name" + t.index [ "finished_at" ], name: "index_solid_queue_jobs_on_finished_at" + t.index [ "queue_name", "finished_at" ], name: "index_solid_queue_jobs_for_filtering" + t.index [ "scheduled_at", "finished_at" ], name: "index_solid_queue_jobs_for_alerting" + end + + create_table "solid_queue_pauses", force: :cascade do |t| + t.string "queue_name", null: false + t.datetime "created_at", null: false + t.index [ "queue_name" ], name: "index_solid_queue_pauses_on_queue_name", unique: true + end + + create_table "solid_queue_processes", force: :cascade do |t| + t.string "kind", null: false + t.datetime "last_heartbeat_at", null: false + t.bigint "supervisor_id" + t.integer "pid", null: false + t.string "hostname" + t.text "metadata" + t.datetime "created_at", null: false + t.string "name", null: false + t.index [ "last_heartbeat_at" ], name: "index_solid_queue_processes_on_last_heartbeat_at" + t.index [ "name", "supervisor_id" ], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true + t.index [ "supervisor_id" ], name: "index_solid_queue_processes_on_supervisor_id" + end + + create_table "solid_queue_ready_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_ready_executions_on_job_id", unique: true + t.index [ "priority", "job_id" ], name: "index_solid_queue_poll_all" + t.index [ "queue_name", "priority", "job_id" ], name: "index_solid_queue_poll_by_queue" + end + + create_table "solid_queue_recurring_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "task_key", null: false + t.datetime "run_at", null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_recurring_executions_on_job_id", unique: true + t.index [ "task_key", "run_at" ], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true + end + + create_table "solid_queue_recurring_tasks", force: :cascade do |t| + t.string "key", null: false + t.string "schedule", null: false + t.string "command", limit: 2048 + t.string "class_name" + t.text "arguments" + t.string "queue_name" + t.integer "priority", default: 0 + t.boolean "static", default: true, null: false + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "key" ], name: "index_solid_queue_recurring_tasks_on_key", unique: true + t.index [ "static" ], name: "index_solid_queue_recurring_tasks_on_static" + end + + create_table "solid_queue_scheduled_executions", force: :cascade do |t| + t.bigint "job_id", null: false + t.string "queue_name", null: false + t.integer "priority", default: 0, null: false + t.datetime "scheduled_at", null: false + t.datetime "created_at", null: false + t.index [ "job_id" ], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true + t.index [ "scheduled_at", "priority", "job_id" ], name: "index_solid_queue_dispatch_all" + end + + create_table "solid_queue_semaphores", force: :cascade do |t| + t.string "key", null: false + t.integer "value", default: 1, null: false + t.datetime "expires_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index [ "expires_at" ], name: "index_solid_queue_semaphores_on_expires_at" + t.index [ "key", "value" ], name: "index_solid_queue_semaphores_on_key_and_value" + t.index [ "key" ], name: "index_solid_queue_semaphores_on_key", unique: true + end + + add_foreign_key "solid_queue_blocked_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_claimed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_failed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_ready_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_recurring_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade + add_foreign_key "solid_queue_scheduled_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade +end diff --git a/db/schema.rb b/db/schema.rb index d8b064f..8944511 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_01_01_154742) do +ActiveRecord::Schema[7.1].define(version: 2025_01_02_175732) do create_table "assignments", force: :cascade do |t| t.integer "user_id", null: false t.integer "session_id", null: false @@ -225,7 +225,9 @@ ActiveRecord::Schema[7.1].define(version: 2025_01_01_154742) do t.string "hostname" t.text "metadata" t.datetime "created_at", null: false + t.string "name", null: false t.index ["last_heartbeat_at"], name: "index_solid_queue_processes_on_last_heartbeat_at" + t.index ["name", "supervisor_id"], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true t.index ["supervisor_id"], name: "index_solid_queue_processes_on_supervisor_id" end @@ -248,6 +250,22 @@ ActiveRecord::Schema[7.1].define(version: 2025_01_01_154742) do t.index ["task_key", "run_at"], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true end + create_table "solid_queue_recurring_tasks", force: :cascade do |t| + t.string "key", null: false + t.string "schedule", null: false + t.string "command", limit: 2048 + t.string "class_name" + t.text "arguments" + t.string "queue_name" + t.integer "priority", default: 0 + t.boolean "static", default: true, null: false + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["key"], name: "index_solid_queue_recurring_tasks_on_key", unique: true + t.index ["static"], name: "index_solid_queue_recurring_tasks_on_static" + end + create_table "solid_queue_scheduled_executions", force: :cascade do |t| t.integer "job_id", null: false t.string "queue_name", null: false -- GitLab