2025-01-08 07:06:50 -05:00
#!/bin/sh
unset BUNDLE_PATH
unset BUNDLE_BIN
set -e
2025-01-09 08:44:16 -05:00
echo " ⚠️ Starting Rails environment: $RAILS_ENV ⚠️ "
2025-01-08 07:06:50 -05:00
# Parse DATABASE_URL if present, otherwise use individual variables
if [ -n " $DATABASE_URL " ] ; then
# Extract components from DATABASE_URL
DATABASE_HOST = $( echo $DATABASE_URL | awk -F[ @/] '{print $4}' )
DATABASE_PORT = $( echo $DATABASE_URL | awk -F[ @/:] '{print $5}' )
DATABASE_USERNAME = $( echo $DATABASE_URL | awk -F[ :/@] '{print $4}' )
DATABASE_PASSWORD = $( echo $DATABASE_URL | awk -F[ :/@] '{print $5}' )
DATABASE_NAME = $( echo $DATABASE_URL | awk -F[ @/] '{print $5}' )
else
# Use existing environment variables
2025-01-09 07:04:22 -05:00
DATABASE_HOST = ${ DATABASE_HOST }
DATABASE_PORT = ${ DATABASE_PORT }
DATABASE_USERNAME = ${ DATABASE_USERNAME }
DATABASE_PASSWORD = ${ DATABASE_PASSWORD }
DATABASE_NAME = ${ DATABASE_NAME }
2025-01-08 07:06:50 -05:00
fi
2025-05-31 09:45:51 -04:00
# Export main database variables to ensure they're available
export DATABASE_HOST
export DATABASE_PORT
export DATABASE_USERNAME
export DATABASE_PASSWORD
export DATABASE_NAME
2025-06-06 13:36:36 -04:00
# Set queue database name
QUEUE_DATABASE_NAME = ${ QUEUE_DATABASE_NAME :- " ${ DATABASE_NAME } _queue " }
export QUEUE_DATABASE_NAME
export QUEUE_DATABASE_PASSWORD
2025-06-08 06:34:41 -04:00
export QUEUE_DATABASE_USERNAME
export QUEUE_DATABASE_PORT
export QUEUE_DATABASE_HOST
2025-06-06 13:36:36 -04:00
2025-01-08 07:06:50 -05:00
# Remove pre-existing puma/passenger server.pid
rm -f $APP_PATH /tmp/pids/server.pid
2025-05-31 13:54:12 -04:00
# Function to check and create a PostgreSQL database
2025-05-31 08:13:51 -04:00
create_database( ) {
local db_name = $1
local db_password = $2
echo " Attempting to create database $db_name if it doesn't exist... "
PGPASSWORD = $db_password createdb -h " $DATABASE_HOST " -p " $DATABASE_PORT " -U " $DATABASE_USERNAME " " $db_name " 2>/dev/null || echo " Note: Database $db_name may already exist or couldn't be created now "
# Wait for the database to become available
echo " ⏳ Waiting for database $db_name to be ready... "
until PGPASSWORD = $db_password psql -h " $DATABASE_HOST " -p " $DATABASE_PORT " -U " $DATABASE_USERNAME " -d " $db_name " -c '\q' 2>/dev/null; do
>& 2 echo " Postgres database $db_name is unavailable - retrying... "
sleep 2
done
echo " ✅ PostgreSQL database $db_name is ready! "
}
2025-06-06 13:36:36 -04:00
# Set up SQLite database directory in the volume for cache and cable
2025-06-08 06:44:02 -04:00
SQLITE_DB_DIR = "/dawarich_sqlite_data"
2025-05-31 13:54:12 -04:00
mkdir -p $SQLITE_DB_DIR
echo " Created SQLite database directory at $SQLITE_DB_DIR "
2025-05-31 11:13:45 -04:00
2025-05-31 13:54:12 -04:00
# Step 1: Database Setup
echo "Setting up all required databases..."
# Create primary PostgreSQL database
2025-05-31 08:13:51 -04:00
create_database " $DATABASE_NAME " " $DATABASE_PASSWORD "
2025-06-06 13:36:36 -04:00
# Create PostgreSQL queue database for solid_queue
create_database " $QUEUE_DATABASE_NAME " " $QUEUE_DATABASE_PASSWORD "
2025-05-31 13:54:12 -04:00
2025-06-06 13:36:36 -04:00
# Setup SQLite databases for cache and cable
2025-05-31 08:13:51 -04:00
2025-05-31 13:54:12 -04:00
# 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)
2025-05-31 08:13:51 -04:00
if [ " $RAILS_ENV " = "production" ] || [ " $RAILS_ENV " = "staging" ] ; then
2025-05-31 13:54:12 -04:00
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 "
2025-05-31 11:13:45 -04:00
fi
# Step 2: Run migrations for all databases
echo "Running migrations for all databases..."
2025-05-31 09:45:51 -04:00
2025-06-06 13:36:36 -04:00
# Run primary database migrations first (needed before other migrations)
2025-05-31 13:54:12 -04:00
echo "Running primary database migrations..."
bundle exec rails db:migrate
2025-05-31 11:13:45 -04:00
2025-06-06 13:36:36 -04:00
# Run PostgreSQL queue database migrations
echo "Running queue database migrations..."
bundle exec rails db:migrate:queue
2025-05-31 13:54:12 -04:00
# Run SQLite database migrations
echo "Running cache database migrations..."
bundle exec rails db:migrate:cache
2025-05-31 11:13:45 -04:00
# Run cable migrations for production/staging
if [ " $RAILS_ENV " = "production" ] || [ " $RAILS_ENV " = "staging" ] ; then
2025-05-31 09:45:51 -04:00
echo "Running cable database migrations..."
bundle exec rails db:migrate:cable
2025-05-31 08:13:51 -04:00
fi
2025-01-08 07:06:50 -05:00
# Run data migrations
echo "Running DATA migrations..."
bundle exec rake data:migrate
2025-05-31 13:54:12 -04:00
echo "Running seeds..."
bundle exec rails db:seed
2025-01-08 07:06:50 -05:00
# run passed commands
bundle exec ${ @ }