feat(quick-260909-dgj): Migrationsverbindung von Laufzeitverbindung trennen (Task 2/4)
- apps/api/scripts/migrate-and-start.sh: TESSERA_MIGRATE_DATABASE_URL fuer den Migrationsschritt, DATABASE_URL bleibt unveraendert fuer den Laufzeitschritt; leer/nicht gesetzt = bisheriges Verhalten - Dockerfile kopiert scripts/ und ruft das Skript als CMD auf; exec statt &&-Verkettung, damit Signale den Node-Prozess erreichen - docker-compose.yml/.prod.yml reichen TESSERA_MIGRATE_DATABASE_URL durch (leerer Vorgabewert); docker-compose.dev.yml/.ci.yml unveraendert - .env.example erklaert beide Variablen mit Platzhaltern, Umstellung bleibt auskommentiert - 5 Tests in start-script.spec.ts (rot vor dem Skript, jetzt gruen) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FYZcd3SSmo14QTqWx2KKzU
This commit is contained in:
Executable
+50
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
# WINDOWS #18 — trennt die Verbindung des Migrationsschritts von der
|
||||
# Verbindung des Laufzeitschritts (T-DGJ-03).
|
||||
#
|
||||
# `prisma migrate deploy` braucht die Rechte des Tabelleneigentuemers, um DDL
|
||||
# auszufuehren. Die Anwendung soll genau diese Rechte NICHT haben — sonst
|
||||
# waere die Rollentrennung aus Migration 20260909130000_rls_app_role wieder
|
||||
# verloren. Ohne getrennte Verbindungen fuer Migration und Laufzeit ist eine
|
||||
# Rollentrennung deshalb nicht moeglich.
|
||||
#
|
||||
# Vorgabe (ohne gesetztes TESSERA_MIGRATE_DATABASE_URL): beide Schritte
|
||||
# nutzen DATABASE_URL — exakt der bisherige Ablauf, unveraendert fuer
|
||||
# lokale Entwicklung, CI und den Server, bis
|
||||
# docs/mandantentrennung-datenbankrolle.md abgearbeitet ist.
|
||||
set -e
|
||||
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
echo "FEHLER: DATABASE_URL ist nicht gesetzt." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# In sh ersetzt ${VAR:-fallback} auch eine gesetzte, aber leere Variable
|
||||
# durch den Fallback — Compose reicht nicht belegte Variablen als leere
|
||||
# Zeichenketten weiter, das soll wie "nicht gesetzt" behandelt werden.
|
||||
MIGRATE_URL="${TESSERA_MIGRATE_DATABASE_URL:-$DATABASE_URL}"
|
||||
|
||||
if [ -n "$TESSERA_MIGRATE_DATABASE_URL" ]; then
|
||||
MIGRATE_SOURCE="TESSERA_MIGRATE_DATABASE_URL"
|
||||
else
|
||||
MIGRATE_SOURCE="DATABASE_URL"
|
||||
fi
|
||||
RUNTIME_SOURCE="DATABASE_URL"
|
||||
|
||||
if [ "$1" = "--print-plan" ]; then
|
||||
# Nur Variablennamen ausgeben, niemals Werte — diese Betriebsart existiert
|
||||
# allein, damit die CI das Verhalten ohne Datenbank pruefen kann.
|
||||
echo "Migrationsschritt verwendet: $MIGRATE_SOURCE"
|
||||
echo "Laufzeitschritt verwendet: $RUNTIME_SOURCE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# DATABASE_URL nur fuer diesen einen Aufruf auf die Migrationsverbindung
|
||||
# setzen (vorangestellte Zuweisung, kein export) — der nachfolgende exec
|
||||
# erbt die unveraenderte DATABASE_URL aus der Umgebung.
|
||||
DATABASE_URL="$MIGRATE_URL" apps/api/node_modules/.bin/prisma migrate deploy --schema apps/api/prisma/schema.prisma
|
||||
|
||||
# exec statt Aufruf, damit Signale (z. B. SIGTERM bei docker stop) den
|
||||
# Node-Prozess erreichen. Die bisherige CMD-Zeile hatte dieses Problem
|
||||
# ebenfalls und loeste es nicht; hier wird es nebenbei mitbehoben.
|
||||
exec node apps/api/dist/main.js
|
||||
Reference in New Issue
Block a user