dev: migration check (#3440)

* dev: wait for  migrations script for beat, worker, takeoff

* dev: update docker compose and migrator commands

* dev: migrator commands for self hosted setup

* dev: add recursive flag for chown
This commit is contained in:
Nikhil 2024-01-23 15:07:45 +05:30 committed by GitHub
parent 801f75f406
commit 512ad83c08
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 69 additions and 13 deletions

View File

@ -33,15 +33,10 @@ RUN pip install -r requirements/local.txt --compile --no-cache-dir
RUN addgroup -S plane && \ RUN addgroup -S plane && \
adduser -S captain -G plane adduser -S captain -G plane
RUN chown captain.plane /code COPY . .
USER captain RUN chown -R captain.plane /code
RUN chmod -R +x /code/bin
# Add in Django deps and generate Django's static files
USER root
# RUN chmod +x ./bin/takeoff ./bin/worker ./bin/beat
RUN chmod -R 777 /code RUN chmod -R 777 /code
USER captain USER captain

3
apiserver/bin/beat Normal file → Executable file
View File

@ -2,4 +2,7 @@
set -e set -e
python manage.py wait_for_db python manage.py wait_for_db
# Wait for migrations
python manage.py wait_for_migrations
# Run the processes
celery -A plane beat -l info celery -A plane beat -l info

View File

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
set -e set -e
python manage.py wait_for_db python manage.py wait_for_db
python manage.py migrate # Wait for migrations
python manage.py wait_for_migrations
# Create the default bucket # Create the default bucket
#!/bin/bash #!/bin/bash

View File

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
set -e set -e
python manage.py wait_for_db python manage.py wait_for_db
python manage.py migrate # Wait for migrations
python manage.py wait_for_migrations
# Create the default bucket # Create the default bucket
#!/bin/bash #!/bin/bash

View File

@ -2,4 +2,7 @@
set -e set -e
python manage.py wait_for_db python manage.py wait_for_db
# Wait for migrations
python manage.py wait_for_migrations
# Run the processes
celery -A plane worker -l info celery -A plane worker -l info

View File

@ -0,0 +1,21 @@
# wait_for_migrations.py
import time
from django.core.management.base import BaseCommand
from django.db.migrations.executor import MigrationExecutor
from django.db import connections, DEFAULT_DB_ALIAS
class Command(BaseCommand):
help = 'Wait for database migrations to complete before starting Celery worker/beat'
def handle(self, *args, **kwargs):
while self._pending_migrations():
self.stdout.write("Waiting for database migrations to complete...")
time.sleep(10) # wait for 10 seconds before checking again
self.stdout.write(self.style.SUCCESS("No migrations Pending. Starting processes ..."))
def _pending_migrations(self):
connection = connections[DEFAULT_DB_ALIAS]
executor = MigrationExecutor(connection)
targets = executor.loader.graph.leaf_nodes()
return bool(executor.migration_plan(targets))

View File

@ -122,6 +122,18 @@ services:
- plane-db - plane-db
- plane-redis - plane-redis
migrator:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-latest}
pull_policy: ${PULL_POLICY:-always}
restart: no
command: >
sh -c "python manage.py wait_for_db &&
python manage.py migrate"
depends_on:
- plane-db
- plane-redis
plane-db: plane-db:
<<: *app-env <<: *app-env
image: postgres:15.2-alpine image: postgres:15.2-alpine

View File

@ -86,7 +86,7 @@ services:
- dev_env - dev_env
volumes: volumes:
- ./apiserver:/code - ./apiserver:/code
# command: /bin/sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000 --settings=plane.settings.local" command: ./bin/takeoff.local
env_file: env_file:
- ./apiserver/.env - ./apiserver/.env
depends_on: depends_on:
@ -104,7 +104,7 @@ services:
- dev_env - dev_env
volumes: volumes:
- ./apiserver:/code - ./apiserver:/code
command: /bin/sh -c "celery -A plane worker -l info" command: ./bin/worker
env_file: env_file:
- ./apiserver/.env - ./apiserver/.env
depends_on: depends_on:
@ -123,7 +123,7 @@ services:
- dev_env - dev_env
volumes: volumes:
- ./apiserver:/code - ./apiserver:/code
command: /bin/sh -c "celery -A plane beat -l info" command: ./bin/beat
env_file: env_file:
- ./apiserver/.env - ./apiserver/.env
depends_on: depends_on:
@ -131,6 +131,26 @@ services:
- plane-db - plane-db
- plane-redis - plane-redis
migrator:
build:
context: ./apiserver
dockerfile: Dockerfile.dev
args:
DOCKER_BUILDKIT: 1
restart: no
networks:
- dev_env
volumes:
- ./apiserver:/code
command: >
sh -c "python manage.py wait_for_db --settings=plane.settings.local &&
python manage.py migrate --settings=plane.settings.local"
env_file:
- ./apiserver/.env
depends_on:
- plane-db
- plane-redis
proxy: proxy:
build: build:
context: ./nginx context: ./nginx