From 570307b4c308692c0022a818238d002ce6e9eed2 Mon Sep 17 00:00:00 2001 From: Andrew Chubatiuk Date: Sun, 10 Mar 2024 18:06:02 +0200 Subject: [PATCH 1/2] minor fix --- Makefile | 2 +- bin/docker-entrypoint | 43 ++++++++++++++++++++++++++++++++++----- client/cypress/cypress.js | 2 +- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 166595d7..72d34313 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ test_db: docker compose exec postgres sh -c 'psql -U postgres -c "drop database if exists tests;" && psql -U postgres -c "create database tests;"' create_database: .env - docker compose run server create_db + docker compose run server migrate clean: docker compose down && docker compose rm diff --git a/bin/docker-entrypoint b/bin/docker-entrypoint index 6b69898d..5bd1711b 100755 --- a/bin/docker-entrypoint +++ b/bin/docker-entrypoint @@ -82,8 +82,41 @@ server() { esac } -create_db() { - exec /app/manage.py database create_tables +migrate() { + REDASH_DB_MIGRATE_TIMEOUT=${REDASH_DB_UPGRADE_TIMEOUT:-600} + REDASH_DB_MIGRATE_MAX_ATTEMPTS=${REDASH_DB_MIGRATE_MAX_ATTEMPTS:-5} + REDASH_DB_MIGRATE_RETRY_WAIT=${REDASH_DB_MIGRATE_RETRY_WAIT:-10} + ATTEMPTS=0 + while ((ATTEMPTS < MAX_ATTEMPTS)); do + echo "Starting attempt ${ATTEMPTS} of ${REDASH_DB_MIGRATE_MAX_ATTEMPTS}" + ATTEMPTS=$((ATTEMPTS+1)) + timeout $REDASH_DB_MIGRATE_TIMEOUT /app/manage.py database create_tables + timeout $REDASH_DB_MIGRATE_TIMEOUT /app/manage.py db upgrade + STATUS=$(timeout $REDASH_DB_MIGRATE_TIMEOUT /app/manage.py status 2>&1) + RETCODE=$? + echo "Return code: ${RETCODE}" + echo "Status: ${STATUS}" + case "$RETCODE" in + 0) + exit 0 + ;; + 124) + echo "Status command timed out after ${REDASH_DB_MIGRATE_TIMEOUT} seconds." + ;; + esac + case "$STATUS" in + *sqlalchemy.exc.OperationalError*) + echo "Database not yet functional, waiting." + ;; + *sqlalchemy.exc.ProgrammingError*) + echo "Database does not appear to be installed." + ;; + esac + echo "Waiting ${REDASH_DB_MIGRATE_RETRY_WAIT} seconds before retrying." + sleep 10 + done + echo "Reached ${REDASH_DB_MIGRATE_MAX_ATTEMPTS} attempts, giving up." + exit 1 } help() { @@ -98,7 +131,7 @@ help() { echo "" echo "shell -- open shell" echo "debug -- start Flask development server with remote debugger via ptvsd" - echo "create_db -- create database tables" + echo "migrate -- create database tables and run migrations" echo "manage -- CLI to manage redash" echo "tests -- run tests" } @@ -141,8 +174,8 @@ case "$1" in shell) exec /app/manage.py shell ;; - create_db) - create_db + migrate) + migrate ;; manage) shift diff --git a/client/cypress/cypress.js b/client/cypress/cypress.js index ce6cb49e..2809133f 100644 --- a/client/cypress/cypress.js +++ b/client/cypress/cypress.js @@ -49,7 +49,7 @@ function buildServer() { function startServer() { console.log("Starting the server..."); execSync("docker compose up -d", { stdio: "inherit" }); - execSync("docker compose run server create_db", { stdio: "inherit" }); + execSync("docker compose run server migrate", { stdio: "inherit" }); } function stopServer() { From e2c9dabd4fdef17122cb60bb9fce6438f5f8bd75 Mon Sep 17 00:00:00 2001 From: Andrew Chubatiuk Date: Sun, 10 Mar 2024 18:08:20 +0200 Subject: [PATCH 2/2] fixed format --- redash/settings/__init__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/redash/settings/__init__.py b/redash/settings/__init__.py index 14228c37..cfe64e04 100644 --- a/redash/settings/__init__.py +++ b/redash/settings/__init__.py @@ -28,9 +28,7 @@ STATSD_USE_TAGS = parse_boolean(os.environ.get("REDASH_STATSD_USE_TAGS", "false")) # Connection settings for Redash's own database (where we store the queries, results, etc) -SQLALCHEMY_DATABASE_URI = os.environ.get( - "REDASH_DB_URL", os.environ.get("DB_URL", "postgresql:///postgres") -) +SQLALCHEMY_DATABASE_URI = os.environ.get("REDASH_DB_URL", os.environ.get("DB_URL", "postgresql:///postgres")) SQLALCHEMY_MAX_OVERFLOW = int_or_none(os.environ.get("SQLALCHEMY_MAX_OVERFLOW")) SQLALCHEMY_POOL_SIZE = int_or_none(os.environ.get("SQLALCHEMY_POOL_SIZE")) SQLALCHEMY_DISABLE_POOL = parse_boolean(os.environ.get("SQLALCHEMY_DISABLE_POOL", "false"))