Update database configuration for SQLite databases

This commit is contained in:
Eugene Burmakin 2025-05-31 19:54:12 +02:00
parent 3f19145041
commit 8e2d63a49f
7 changed files with 72 additions and 78 deletions

2
.gitignore vendored
View file

@ -72,3 +72,5 @@
/config/credentials/staging.yml.enc
Makefile
/db/*.sqlite3

View file

@ -10,14 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
This release introduces a new way to run background jobs and cache data. Before updating, make sure your Sidekiq queues (https://your_dawarich_app/sidekiq) are empty.
Moving to SolidQueue and SolidCache will require creating new databases, which will be created automatically when you start the app. If that didn't happen, you can create them manually and set the following environment variables:
- `QUEUE_DATABASE_NAME` - name of the queue database (default is `dawarich_development_queue`)
- `QUEUE_DATABASE_PASSWORD` - password for the queue database
- `CACHE_DATABASE_NAME` - name of the cache database (default is `dawarich_development_cache`)
- `CACHE_DATABASE_PASSWORD` - password for the cache database
- `CABLE_DATABASE_NAME` - name of the cable database (default is `dawarich_development_cable`)
- `CABLE_DATABASE_PASSWORD` - password for the cable database
Moving to SolidQueue and SolidCache will require creating new SQLite databases, which will be created automatically when you start the app. They will be stored in the `dawarich_db_data` volume.
## Fixed

View file

@ -23,6 +23,7 @@ gem 'lograge'
gem 'mission_control-jobs'
gem 'oj'
gem 'pg'
gem 'sqlite3', '~> 2.6'
gem 'prometheus_exporter'
gem 'activerecord-postgis-adapter'
gem 'puma'

View file

@ -475,6 +475,12 @@ GEM
actionpack (>= 6.1)
activesupport (>= 6.1)
sprockets (>= 3.0.0)
sqlite3 (2.6.0-aarch64-linux-gnu)
sqlite3 (2.6.0-arm-linux-gnu)
sqlite3 (2.6.0-arm64-darwin)
sqlite3 (2.6.0-x86-linux-gnu)
sqlite3 (2.6.0-x86_64-darwin)
sqlite3 (2.6.0-x86_64-linux-gnu)
stackprof (0.2.27)
stimulus-rails (1.3.4)
railties (>= 6.0.0)
@ -589,6 +595,7 @@ DEPENDENCIES
solid_cache (= 1.0.7)
solid_queue (~> 1.1)
sprockets-rails
sqlite3 (~> 2.6)
stackprof
stimulus-rails
strong_migrations

View file

@ -9,19 +9,22 @@ default: &default
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
timeout: 5000
sqlite_default: &sqlite_default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
timeout: 5000
development:
primary:
<<: *default
database: <%= ENV['DATABASE_NAME'] || 'dawarich_development' %>
queue:
<<: *default
database: <%= ENV['QUEUE_DATABASE_NAME'] || 'dawarich_development_queue' %>
password: <%= ENV['QUEUE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['QUEUE_DATABASE_PATH'] || 'db/queue.sqlite3' %>
migrations_paths: db/queue_migrate
cache:
<<: *default
database: <%= ENV['CACHE_DATABASE_NAME'] || 'dawarich_development_cache' %>
password: <%= ENV['CACHE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['CACHE_DATABASE_PATH'] || 'db/cache.sqlite3' %>
migrations_paths: db/cache_migrate
test:
@ -34,19 +37,16 @@ production:
<<: *default
database: <%= ENV['DATABASE_NAME'] || 'dawarich_production' %>
queue:
<<: *default
database: <%= ENV['QUEUE_DATABASE_NAME'] || 'dawarich_production_queue' %>
password: <%= ENV['QUEUE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['QUEUE_DATABASE_PATH'] || 'db/queue.sqlite3' %>
migrations_paths: db/queue_migrate
cable:
<<: *default
database: <%= ENV['CABLE_DATABASE_NAME'] || 'dawarich_production_cable' %>
password: <%= ENV['CABLE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['CABLE_DATABASE_PATH'] || 'db/cable.sqlite3' %>
migrations_paths: db/cable_migrate
cache:
<<: *default
database: <%= ENV['CACHE_DATABASE_NAME'] || 'dawarich_production_cache' %>
password: <%= ENV['CACHE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['CACHE_DATABASE_PATH'] %>
migrations_paths: db/cache_migrate
staging:
@ -55,17 +55,14 @@ staging:
database: <%= ENV['DATABASE_NAME'] || 'dawarich_staging' %>
password: <%= ENV['DATABASE_PASSWORD'] %>
cache:
<<: *default
database: <%= ENV['CACHE_DATABASE_NAME'] || 'dawarich_staging_cache' %>
password: <%= ENV['CACHE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['CACHE_DATABASE_PATH'] || 'db/cache.sqlite3' %>
migrations_paths: db/cache_migrate
queue:
<<: *default
database: <%= ENV['QUEUE_DATABASE_NAME'] || 'dawarich_staging_queue' %>
password: <%= ENV['QUEUE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['QUEUE_DATABASE_PATH'] || 'db/queue.sqlite3' %>
migrations_paths: db/queue_migrate
cable:
<<: *default
database: <%= ENV['CABLE_DATABASE_NAME'] || 'dawarich_staging_cable' %>
password: <%= ENV['CABLE_DATABASE_PASSWORD'] %>
<<: *sqlite_default
database: <%= ENV['CABLE_DATABASE_PATH'] || 'db/cable.sqlite3' %>
migrations_paths: db/cable_migrate

View file

@ -45,6 +45,7 @@ services:
- dawarich_public:/var/app/public
- dawarich_watched:/var/app/tmp/imports/watched
- dawarich_storage:/var/app/storage
- dawarich_db_data:/dawarich_db_data
networks:
- dawarich
ports:
@ -62,12 +63,10 @@ services:
DATABASE_USERNAME: postgres
DATABASE_PASSWORD: password
DATABASE_NAME: dawarich_development
QUEUE_DATABASE_NAME: dawarich_development_queue
QUEUE_DATABASE_PASSWORD: password
CACHE_DATABASE_NAME: dawarich_development_cache
CACHE_DATABASE_PASSWORD: password
CABLE_DATABASE_NAME: dawarich_development_cable
CABLE_DATABASE_PASSWORD: password
# SQLite database paths for secondary databases
QUEUE_DATABASE_PATH: /dawarich_db_data/dawarich_development_queue.sqlite3
CACHE_DATABASE_PATH: /dawarich_db_data/dawarich_development_cache.sqlite3
CABLE_DATABASE_PATH: /dawarich_db_data/dawarich_development_cable.sqlite3
MIN_MINUTES_SPENT_IN_CITY: 60
APPLICATION_HOSTS: localhost
TIME_ZONE: Europe/London
@ -107,6 +106,7 @@ services:
- dawarich_public:/var/app/public
- dawarich_watched:/var/app/tmp/imports/watched
- dawarich_storage:/var/app/storage
- dawarich_db_data:/dawarich_db_data
networks:
- dawarich
stdin_open: true

View file

@ -34,7 +34,7 @@ export DATABASE_NAME
# Remove pre-existing puma/passenger server.pid
rm -f $APP_PATH/tmp/pids/server.pid
# Function to check and create a database
# Function to check and create a PostgreSQL database
create_database() {
local db_name=$1
local db_password=$2
@ -51,49 +51,49 @@ create_database() {
echo "✅ PostgreSQL database $db_name is ready!"
}
# Step 1: Create all databases
echo "Creating all required databases..."
# Set up SQLite database directory in the volume
SQLITE_DB_DIR="/dawarich_db_data"
mkdir -p $SQLITE_DB_DIR
echo "Created SQLite database directory at $SQLITE_DB_DIR"
# Create primary database
# Step 1: Database Setup
echo "Setting up all required databases..."
# Create primary PostgreSQL database
create_database "$DATABASE_NAME" "$DATABASE_PASSWORD"
# Create additional databases based on environment
if [ "$RAILS_ENV" = "development" ] || [ "$RAILS_ENV" = "production" ] || [ "$RAILS_ENV" = "staging" ]; then
# Setup Queue database
QUEUE_DATABASE_NAME=${QUEUE_DATABASE_NAME:-${DATABASE_NAME}_queue}
QUEUE_DATABASE_PASSWORD=${QUEUE_DATABASE_PASSWORD:-$DATABASE_PASSWORD}
export QUEUE_DATABASE_NAME
export QUEUE_DATABASE_PASSWORD
create_database "$QUEUE_DATABASE_NAME" "$QUEUE_DATABASE_PASSWORD"
# Setup SQLite databases based on environment
# Setup Cache database
CACHE_DATABASE_NAME=${CACHE_DATABASE_NAME:-${DATABASE_NAME}_cache}
CACHE_DATABASE_PASSWORD=${CACHE_DATABASE_PASSWORD:-$DATABASE_PASSWORD}
export CACHE_DATABASE_NAME
export CACHE_DATABASE_PASSWORD
create_database "$CACHE_DATABASE_NAME" "$CACHE_DATABASE_PASSWORD"
fi
# Setup Queue database with SQLite
QUEUE_DATABASE_PATH=${QUEUE_DATABASE_PATH:-"$SQLITE_DB_DIR/${DATABASE_NAME}_queue.sqlite3"}
export QUEUE_DATABASE_PATH
echo "✅ SQLite queue database configured at $QUEUE_DATABASE_PATH"
# Setup Cable database (only for production and staging)
# Setup Cache database with SQLite
CACHE_DATABASE_PATH=${CACHE_DATABASE_PATH:-"$SQLITE_DB_DIR/${DATABASE_NAME}_cache.sqlite3"}
export CACHE_DATABASE_PATH
echo "✅ SQLite cache database configured at $CACHE_DATABASE_PATH"
# Setup Cable database with SQLite (only for production and staging)
if [ "$RAILS_ENV" = "production" ] || [ "$RAILS_ENV" = "staging" ]; then
CABLE_DATABASE_NAME=${CABLE_DATABASE_NAME:-${DATABASE_NAME}_cable}
CABLE_DATABASE_PASSWORD=${CABLE_DATABASE_PASSWORD:-$DATABASE_PASSWORD}
export CABLE_DATABASE_NAME
export CABLE_DATABASE_PASSWORD
create_database "$CABLE_DATABASE_NAME" "$CABLE_DATABASE_PASSWORD"
CABLE_DATABASE_PATH=${CABLE_DATABASE_PATH:-"$SQLITE_DB_DIR/${DATABASE_NAME}_cable.sqlite3"}
export CABLE_DATABASE_PATH
echo "✅ SQLite cable database configured at $CABLE_DATABASE_PATH"
fi
# Step 2: Run migrations for all databases
echo "Running migrations for all databases..."
# Run cache and queue migrations first (needed for app initialization)
if [ "$RAILS_ENV" = "development" ] || [ "$RAILS_ENV" = "production" ] || [ "$RAILS_ENV" = "staging" ]; then
echo "Running cache database migrations..."
bundle exec rails db:migrate:cache
# Run primary database migrations first (needed before SQLite migrations)
echo "Running primary database migrations..."
bundle exec rails db:migrate
echo "Running queue database migrations..."
bundle exec rails db:migrate:queue
fi
# Run SQLite database migrations
echo "Running cache database migrations..."
bundle exec rails db:migrate:cache
echo "Running queue database migrations..."
bundle exec rails db:migrate:queue
# Run cable migrations for production/staging
if [ "$RAILS_ENV" = "production" ] || [ "$RAILS_ENV" = "staging" ]; then
@ -101,18 +101,12 @@ if [ "$RAILS_ENV" = "production" ] || [ "$RAILS_ENV" = "staging" ]; then
bundle exec rails db:migrate:cable
fi
# Run primary database migrations
echo "Running primary database migrations..."
bundle exec rails db:migrate
# Run data migrations
echo "Running DATA migrations..."
bundle exec rake data:migrate
# if [ "$RAILS_ENV" != "production" ]; then
echo "Running seeds..."
bundle exec rails db:seed
# fi
echo "Running seeds..."
bundle exec rails db:seed
# run passed commands
bundle exec ${@}