Nalochen / jtr-2.0

Apache License 2.0
4 stars 0 forks source link

Von create_all zu migrations wechseln #105

Closed LeanderCS closed 1 week ago

LeanderCS commented 1 month ago

1. Migrationen in einem benutzerdefinierten Verzeichnis speichern

Beim Initialisieren und Ausführen von flask db-Befehlen kannst du den Pfad für die Migrationen angeben, indem du --directory hinzufügst.

Schritte:

a. Erstelle die Verzeichnisstruktur:

Erstelle den gewünschten Ordner in deinem Projekt, falls dieser noch nicht existiert:

mkdir -p DataDomain/Database/Migrations

b. Initialisiere die Migrationen in diesem Verzeichnis:

Nutze den Befehl flask db init, um die Migrationen im angegebenen Verzeichnis zu initialisieren:

flask db init --directory DataDomain/Database/Migrations

Dieser Befehl erstellt die Migrationsdateien im Verzeichnis /DataDomain/Database/Migrations.

c. Erstelle die Migrationsskripte:

Wenn du eine neue Migration erstellen möchtest, kannst du den --directory-Parameter verwenden:

flask db migrate -m "Initial migration" --directory DataDomain/Database/Migrations

d. Anwenden der Migrationen:

Um die Migrationen aus diesem Verzeichnis anzuwenden, führst du flask db upgrade mit dem --directory-Parameter aus:

flask db upgrade --directory DataDomain/Database/Migrations

2. Integration in dein run.py-Skript:

Wenn du möchtest, dass die Migrationen in deinem benutzerdefinierten Verzeichnis automatisch beim Start angewendet werden, kannst du den Pfad in deinem Python-Skript explizit angeben.

Hier ein aktualisiertes Beispiel für dein run.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, upgrade
import os

app = Flask(__name__)
app.config.from_object('config.DevelopmentConfig')  # Passe das an deine Config an

db = SQLAlchemy(app)
migrate = Migrate(app, db, directory='DataDomain/Database/Migrations')  # Setze hier das Verzeichnis

# Importiere deine Modelle hier
from your_models import User, Tournament, Team

def apply_migrations():
    """Führt Migrationen aus dem angegebenen Verzeichnis automatisch aus."""
    with app.app_context():
        upgrade(directory='DataDomain/Database/Migrations')

if __name__ == "__main__":
    # Vor dem Start von Flask Migrationen anwenden
    apply_migrations()

    # Starte die Flask-Anwendung
    app.run(host="0.0.0.0", port=5000)

3. Docker-Integration:

Wenn du deine Docker-Container startest, kannst du sicherstellen, dass der Migrationspfad auch in Docker funktioniert. Der Befehl zum Anwenden der Migrationen bleibt derselbe, da du den --directory-Parameter angibst.

Beispiel docker-compose.yml:

command: >
  flask db upgrade --directory DataDomain/Database/Migrations

Wir wollen es in die provision.sh packen und dafür muss dort ein extra Step für die migrations hinzugefügt werden