Skip to content

Commit f9b1db7

Browse files
committed
Update Solid Queue setup in dummy app
Separate `queue` database and bin/jobs to start. Also, refresh setup script to support `docker compose` and set up the 3 DBs.
1 parent 42ce2ac commit f9b1db7

File tree

8 files changed

+176
-14
lines changed

8 files changed

+176
-14
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/tmp/
66
/test/dummy/db/*.sqlite3
77
/test/dummy/db/*.sqlite3-*
8-
/test/dummy/log/*.log
8+
/test/dummy/log/*.log*
99
/test/dummy/tmp/
1010

1111
# Folder for JetBrains IDEs

.rubocop.yml

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ AllCops:
77
TargetRubyVersion: 3.0
88
Exclude:
99
- "test/dummy/db/schema.rb"
10+
- "test/dummy/db/queue_schema.rb"

bin/setup

+11-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
set -eu
33
cd "$(dirname "${BASH_SOURCE[0]}")"
44

5-
docker-compose up -d --remove-orphans
6-
docker-compose ps
5+
if docker compose version &> /dev/null; then
6+
DOCKER_COMPOSE_CMD="docker compose"
7+
else
8+
DOCKER_COMPOSE_CMD="docker-compose"
9+
fi
10+
11+
$DOCKER_COMPOSE_CMD up -d --remove-orphans
12+
$DOCKER_COMPOSE_CMD ps
713

814
bundle
915

1016
echo "Creating databases..."
1117

12-
rails db:reset
18+
rails db:reset TARGET_DB=sqlite
19+
rails db:reset TARGET_DB=mysql
20+
rails db:reset TARGET_DB=postgres

test/dummy/bin/jobs

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env ruby
2+
3+
require_relative "../config/environment"
4+
require "solid_queue/cli"
5+
6+
SolidQueue::Cli.start(ARGV)

test/dummy/config/database.yml

+8-8
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ default: &default
3535
development:
3636
primary:
3737
<<: *default
38-
database: <%= database_name_from("solid_queue_development") %>
39-
replica:
38+
database: <%= database_name_from("development") %>
39+
queue:
4040
<<: *default
41-
database: <%= database_name_from("solid_queue_development") %>
42-
replica: true
41+
database: <%= database_name_from("development_queue") %>
42+
migrations_paths: db/queue_migrate
4343

4444
test:
4545
primary:
4646
<<: *default
4747
pool: 20
48-
database: <%= database_name_from("solid_queue_test") %>
49-
replica:
48+
database: <%= database_name_from("test") %>
49+
queue:
5050
<<: *default
5151
pool: 20
52-
database: <%= database_name_from("solid_queue_test") %>
53-
replica: true
52+
database: <%= database_name_from("test_queue") %>
53+
migrations_paths: db/queue_migrate

test/dummy/config/environments/development.rb

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
# Raises error for missing translations.
5252
# config.i18n.raise_on_missing_translations = true
5353

54+
# Replace the default in-process and non-durable queuing backend for Active Job.
55+
config.active_job.queue_adapter = :solid_queue
56+
config.solid_queue.connects_to = { database: { writing: :queue } }
57+
5458
# Annotate rendered view with file names.
5559
# config.action_view.annotate_rendered_view_with_filenames = true
5660

test/dummy/config/environments/production.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@
4444
# Use a different cache store in production.
4545
# config.cache_store = :mem_cache_store
4646

47-
# Use a real queuing backend for Active Job (and separate queues per environment).
48-
# config.active_job.queue_adapter = :resque
47+
# Replace the default in-process and non-durable queuing backend for Active Job.
48+
config.active_job.queue_adapter = :solid_queue
49+
config.solid_queue.connects_to = { database: { writing: :queue } }
50+
4951
# config.active_job.queue_name_prefix = "dummy_production"
5052

5153
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to

test/dummy/db/queue_schema.rb

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# This file is auto-generated from the current state of the database. Instead
2+
# of editing this file, please use the migrations feature of Active Record to
3+
# incrementally modify your database, and then regenerate this schema definition.
4+
#
5+
# This file is the source Rails uses to define your schema when running `bin/rails
6+
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7+
# be faster and is potentially less error prone than running all of your
8+
# migrations from scratch. Old migrations may fail to apply correctly if those
9+
# migrations use external dependencies or application code.
10+
#
11+
# It's strongly recommended that you check this file into your version control system.
12+
13+
ActiveRecord::Schema[7.1].define(version: 1) do
14+
create_table "solid_queue_blocked_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
15+
t.bigint "job_id", null: false
16+
t.string "queue_name", null: false
17+
t.integer "priority", default: 0, null: false
18+
t.string "concurrency_key", null: false
19+
t.datetime "expires_at", null: false
20+
t.datetime "created_at", null: false
21+
t.index ["concurrency_key", "priority", "job_id"], name: "index_solid_queue_blocked_executions_for_release"
22+
t.index ["expires_at", "concurrency_key"], name: "index_solid_queue_blocked_executions_for_maintenance"
23+
t.index ["job_id"], name: "index_solid_queue_blocked_executions_on_job_id", unique: true
24+
end
25+
26+
create_table "solid_queue_claimed_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
27+
t.bigint "job_id", null: false
28+
t.bigint "process_id"
29+
t.datetime "created_at", null: false
30+
t.index ["job_id"], name: "index_solid_queue_claimed_executions_on_job_id", unique: true
31+
t.index ["process_id", "job_id"], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id"
32+
end
33+
34+
create_table "solid_queue_failed_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
35+
t.bigint "job_id", null: false
36+
t.text "error"
37+
t.datetime "created_at", null: false
38+
t.index ["job_id"], name: "index_solid_queue_failed_executions_on_job_id", unique: true
39+
end
40+
41+
create_table "solid_queue_jobs", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
42+
t.string "queue_name", null: false
43+
t.string "class_name", null: false
44+
t.text "arguments"
45+
t.integer "priority", default: 0, null: false
46+
t.string "active_job_id"
47+
t.datetime "scheduled_at"
48+
t.datetime "finished_at"
49+
t.string "concurrency_key"
50+
t.datetime "created_at", null: false
51+
t.datetime "updated_at", null: false
52+
t.index ["active_job_id"], name: "index_solid_queue_jobs_on_active_job_id"
53+
t.index ["class_name"], name: "index_solid_queue_jobs_on_class_name"
54+
t.index ["finished_at"], name: "index_solid_queue_jobs_on_finished_at"
55+
t.index ["queue_name", "finished_at"], name: "index_solid_queue_jobs_for_filtering"
56+
t.index ["scheduled_at", "finished_at"], name: "index_solid_queue_jobs_for_alerting"
57+
end
58+
59+
create_table "solid_queue_pauses", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
60+
t.string "queue_name", null: false
61+
t.datetime "created_at", null: false
62+
t.index ["queue_name"], name: "index_solid_queue_pauses_on_queue_name", unique: true
63+
end
64+
65+
create_table "solid_queue_processes", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
66+
t.string "kind", null: false
67+
t.datetime "last_heartbeat_at", null: false
68+
t.bigint "supervisor_id"
69+
t.integer "pid", null: false
70+
t.string "hostname"
71+
t.text "metadata"
72+
t.datetime "created_at", null: false
73+
t.string "name", null: false
74+
t.index ["last_heartbeat_at"], name: "index_solid_queue_processes_on_last_heartbeat_at"
75+
t.index ["name", "supervisor_id"], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true
76+
t.index ["supervisor_id"], name: "index_solid_queue_processes_on_supervisor_id"
77+
end
78+
79+
create_table "solid_queue_ready_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
80+
t.bigint "job_id", null: false
81+
t.string "queue_name", null: false
82+
t.integer "priority", default: 0, null: false
83+
t.datetime "created_at", null: false
84+
t.index ["job_id"], name: "index_solid_queue_ready_executions_on_job_id", unique: true
85+
t.index ["priority", "job_id"], name: "index_solid_queue_poll_all"
86+
t.index ["queue_name", "priority", "job_id"], name: "index_solid_queue_poll_by_queue"
87+
end
88+
89+
create_table "solid_queue_recurring_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
90+
t.bigint "job_id", null: false
91+
t.string "task_key", null: false
92+
t.datetime "run_at", null: false
93+
t.datetime "created_at", null: false
94+
t.index ["job_id"], name: "index_solid_queue_recurring_executions_on_job_id", unique: true
95+
t.index ["task_key", "run_at"], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true
96+
end
97+
98+
create_table "solid_queue_recurring_tasks", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
99+
t.string "key", null: false
100+
t.string "schedule", null: false
101+
t.string "command", limit: 2048
102+
t.string "class_name"
103+
t.text "arguments"
104+
t.string "queue_name"
105+
t.integer "priority", default: 0
106+
t.boolean "static", default: true, null: false
107+
t.text "description"
108+
t.datetime "created_at", null: false
109+
t.datetime "updated_at", null: false
110+
t.index ["key"], name: "index_solid_queue_recurring_tasks_on_key", unique: true
111+
t.index ["static"], name: "index_solid_queue_recurring_tasks_on_static"
112+
end
113+
114+
create_table "solid_queue_scheduled_executions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
115+
t.bigint "job_id", null: false
116+
t.string "queue_name", null: false
117+
t.integer "priority", default: 0, null: false
118+
t.datetime "scheduled_at", null: false
119+
t.datetime "created_at", null: false
120+
t.index ["job_id"], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true
121+
t.index ["scheduled_at", "priority", "job_id"], name: "index_solid_queue_dispatch_all"
122+
end
123+
124+
create_table "solid_queue_semaphores", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
125+
t.string "key", null: false
126+
t.integer "value", default: 1, null: false
127+
t.datetime "expires_at", null: false
128+
t.datetime "created_at", null: false
129+
t.datetime "updated_at", null: false
130+
t.index ["expires_at"], name: "index_solid_queue_semaphores_on_expires_at"
131+
t.index ["key", "value"], name: "index_solid_queue_semaphores_on_key_and_value"
132+
t.index ["key"], name: "index_solid_queue_semaphores_on_key", unique: true
133+
end
134+
135+
add_foreign_key "solid_queue_blocked_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
136+
add_foreign_key "solid_queue_claimed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
137+
add_foreign_key "solid_queue_failed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
138+
add_foreign_key "solid_queue_ready_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
139+
add_foreign_key "solid_queue_recurring_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
140+
add_foreign_key "solid_queue_scheduled_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
141+
end

0 commit comments

Comments
 (0)