From d275ac29bdd745444fc7cc75d71a4a0cd095f25e Mon Sep 17 00:00:00 2001 From: Jelmer Draaijer Date: Thu, 15 Feb 2024 11:21:16 +0100 Subject: [PATCH 1/4] Remove DATABASE where possible --- .../developing-locally.rst | 4 ++- {{cookiecutter.project_slug}}/.drone.yml | 2 -- .../.github/workflows/ci.yml | 6 ++++- {{cookiecutter.project_slug}}/.gitlab-ci.yml | 2 -- .../compose/production/django/Dockerfile | 3 +-- .../compose/production/django/entrypoint | 1 - .../config/settings/base.py | 25 +++++++++++-------- 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/2-local-development/developing-locally.rst b/docs/2-local-development/developing-locally.rst index 11343e154..04350d0d1 100644 --- a/docs/2-local-development/developing-locally.rst +++ b/docs/2-local-development/developing-locally.rst @@ -54,7 +54,9 @@ First things first. #. Set the environment variables for your database(s): :: - $ export DATABASE_URL=postgres://postgres:@127.0.0.1:5432/ + $ export POSTGRES_USER= + $ export POSTGRES_PASSWORD= + $ export POSTGRES_DB= # Optional: set broker URL if using Celery $ export CELERY_BROKER_URL=redis://localhost:6379/0 diff --git a/{{cookiecutter.project_slug}}/.drone.yml b/{{cookiecutter.project_slug}}/.drone.yml index d6c13e62b..aea70aafb 100644 --- a/{{cookiecutter.project_slug}}/.drone.yml +++ b/{{cookiecutter.project_slug}}/.drone.yml @@ -28,8 +28,6 @@ steps: pull: if-not-exists {%- if cookiecutter.use_docker == 'y' %} image: docker:25.0 - environment: - DATABASE_URL: pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres/$POSTGRES_DB commands: - docker-compose -f docker-compose.local.yml build - docker-compose -f docker-compose.docs.yml build diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml index 0d8ed0cad..982a990cf 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml @@ -60,7 +60,11 @@ jobs: CELERY_BROKER_URL: 'redis://localhost:6379/0' {%- endif %} # postgres://user:password@host:port/database - DATABASE_URL: 'postgres://postgres:postgres@localhost:5432/postgres' + POSTGRES_USER: 'postgres' + POSTGRES_PASSWORD: 'postgres' + POSTGRES_DB: 'postgres' + POSTGRES_HOST: 'postgres' + {%- endif %} steps: diff --git a/{{cookiecutter.project_slug}}/.gitlab-ci.yml b/{{cookiecutter.project_slug}}/.gitlab-ci.yml index 71216bc7a..7f4145996 100644 --- a/{{cookiecutter.project_slug}}/.gitlab-ci.yml +++ b/{{cookiecutter.project_slug}}/.gitlab-ci.yml @@ -42,8 +42,6 @@ pytest: image: python:3.12 services: - postgres:{{ cookiecutter.postgresql_version }} - variables: - DATABASE_URL: pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres/$POSTGRES_DB before_script: - pip install -r requirements/local.txt script: diff --git a/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile index 83d385949..3ed1d6c3b 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile +++ b/{{cookiecutter.project_slug}}/compose/production/django/Dockerfile @@ -124,8 +124,7 @@ RUN chown -R django:django ${APP_HOME} USER django -RUN DATABASE_URL="" \ - {%- if cookiecutter.use_celery == "y" %} +RUN {%- if cookiecutter.use_celery == "y" %} CELERY_BROKER_URL="" \ {%- endif %} DJANGO_SETTINGS_MODULE="config.settings.test" \ diff --git a/{{cookiecutter.project_slug}}/compose/production/django/entrypoint b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint index fe517f4ce..07c042f92 100644 --- a/{{cookiecutter.project_slug}}/compose/production/django/entrypoint +++ b/{{cookiecutter.project_slug}}/compose/production/django/entrypoint @@ -14,7 +14,6 @@ if [ -z "${POSTGRES_USER}" ]; then base_postgres_image_default_user='postgres' export POSTGRES_USER="${base_postgres_image_default_user}" fi -export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" wait-for-it "${POSTGRES_HOST}:${POSTGRES_PORT}" -t 30 diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py index f1039b748..a294d2f34 100644 --- a/{{cookiecutter.project_slug}}/config/settings/base.py +++ b/{{cookiecutter.project_slug}}/config/settings/base.py @@ -45,16 +45,21 @@ LOCALE_PATHS = [str(BASE_DIR / "locale")] # DATABASES # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#databases -{% if cookiecutter.use_docker == "y" -%} -DATABASES = {"default": env.db("DATABASE_URL")} -{%- else %} -DATABASES = { - "default": env.db( - "DATABASE_URL", - default="postgres://{% if cookiecutter.windows == 'y' %}localhost{% endif %}/{{cookiecutter.project_slug}}", - ), -} -{%- endif %} + +if db_url := env.db("DATABASE_URL", default=None): + DATABASES = {"default": db_url} +else: + DATABASES = { + "default": { + "ENGINE": "django.db.backends.postgresql", + "NAME": env.str("POSTGRES_DB"), + "USER": env.str("POSTGRES_USER"), + "PASSWORD": env.str("POSTGRES_PASSWORD"), + "HOST": env.str("POSTGRES_HOST", default="{% if cookiecutter.windows == 'y' or cookiecutter.use_docker == 'n' %}localhost{%else%}postgres{% endif %}"), + "PORT": env.str("POSTGRES_PORT", default="5432"), + }, + } + DATABASES["default"]["ATOMIC_REQUESTS"] = True # https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-DEFAULT_AUTO_FIELD DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" From 6e6d32791bba6bf2679fc90422350d36b5f6af22 Mon Sep 17 00:00:00 2001 From: Jelmer Date: Mon, 14 Oct 2024 20:42:08 +0200 Subject: [PATCH 2/4] Update {{cookiecutter.project_slug}}/config/settings/base.py Co-authored-by: Bruno Alla --- {{cookiecutter.project_slug}}/config/settings/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py index a294d2f34..2c8582910 100644 --- a/{{cookiecutter.project_slug}}/config/settings/base.py +++ b/{{cookiecutter.project_slug}}/config/settings/base.py @@ -55,7 +55,7 @@ else: "NAME": env.str("POSTGRES_DB"), "USER": env.str("POSTGRES_USER"), "PASSWORD": env.str("POSTGRES_PASSWORD"), - "HOST": env.str("POSTGRES_HOST", default="{% if cookiecutter.windows == 'y' or cookiecutter.use_docker == 'n' %}localhost{%else%}postgres{% endif %}"), + "HOST": env.str("POSTGRES_HOST", default="{% if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %}localhost{%else%}postgres{% endif %}"), "PORT": env.str("POSTGRES_PORT", default="5432"), }, } From ed5044595d0dc6da575f1907c38e43059c0987c9 Mon Sep 17 00:00:00 2001 From: Jelmer Date: Mon, 14 Oct 2024 20:42:08 +0200 Subject: [PATCH 3/4] Updated with PR feedback --- docs/2-local-development/developing-locally.rst | 2 +- {{cookiecutter.project_slug}}/.github/workflows/ci.yml | 3 +-- {{cookiecutter.project_slug}}/.gitlab-ci.yml | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/2-local-development/developing-locally.rst b/docs/2-local-development/developing-locally.rst index 04350d0d1..8c0ad1480 100644 --- a/docs/2-local-development/developing-locally.rst +++ b/docs/2-local-development/developing-locally.rst @@ -54,7 +54,7 @@ First things first. #. Set the environment variables for your database(s): :: - $ export POSTGRES_USER= + $ export POSTGRES_USER=postgres $ export POSTGRES_PASSWORD= $ export POSTGRES_DB= # Optional: set broker URL if using Celery diff --git a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml index 982a990cf..428798f63 100644 --- a/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +++ b/{{cookiecutter.project_slug}}/.github/workflows/ci.yml @@ -57,9 +57,8 @@ jobs: env: {%- if cookiecutter.use_celery == 'y' %} - CELERY_BROKER_URL: 'redis://localhost:6379/0' + REDIS_URL: 'redis://localhost:6379/0' {%- endif %} - # postgres://user:password@host:port/database POSTGRES_USER: 'postgres' POSTGRES_PASSWORD: 'postgres' POSTGRES_DB: 'postgres' diff --git a/{{cookiecutter.project_slug}}/.gitlab-ci.yml b/{{cookiecutter.project_slug}}/.gitlab-ci.yml index 7f4145996..24d9e8b93 100644 --- a/{{cookiecutter.project_slug}}/.gitlab-ci.yml +++ b/{{cookiecutter.project_slug}}/.gitlab-ci.yml @@ -5,6 +5,7 @@ stages: variables: POSTGRES_USER: '{{ cookiecutter.project_slug }}' POSTGRES_PASSWORD: '' + POSTGRES_HOST: postgres POSTGRES_DB: 'test_{{ cookiecutter.project_slug }}' POSTGRES_HOST_AUTH_METHOD: trust {%- if cookiecutter.use_celery == 'y' %} From 958c39011efacc72cad66e0ca81ba197abafd6d5 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Wed, 27 Nov 2024 22:32:31 +0100 Subject: [PATCH 4/4] Dedent DATABASES dict --- .../config/settings/base.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/{{cookiecutter.project_slug}}/config/settings/base.py b/{{cookiecutter.project_slug}}/config/settings/base.py index 2aad740ec..58dc8afa1 100644 --- a/{{cookiecutter.project_slug}}/config/settings/base.py +++ b/{{cookiecutter.project_slug}}/config/settings/base.py @@ -53,14 +53,14 @@ if db_url := env.db("DATABASE_URL", default=None): DATABASES = {"default": db_url} else: DATABASES = { - "default": { - "ENGINE": "django.db.backends.postgresql", - "NAME": env.str("POSTGRES_DB"), - "USER": env.str("POSTGRES_USER"), - "PASSWORD": env.str("POSTGRES_PASSWORD"), - "HOST": env.str("POSTGRES_HOST", default="{% if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %}localhost{%else%}postgres{% endif %}"), - "PORT": env.str("POSTGRES_PORT", default="5432"), - }, + "default": { + "ENGINE": "django.db.backends.postgresql", + "NAME": env.str("POSTGRES_DB"), + "USER": env.str("POSTGRES_USER"), + "PASSWORD": env.str("POSTGRES_PASSWORD"), + "HOST": env.str("POSTGRES_HOST", default="{% if cookiecutter.windows == 'y' and cookiecutter.use_docker == 'n' %}localhost{%else%}postgres{% endif %}"), + "PORT": env.str("POSTGRES_PORT", default="5432"), + }, } DATABASES["default"]["ATOMIC_REQUESTS"] = True