fix: prisma.ts baut DATABASE_URL aus DB_*-Vars (für docker exec)
docker-compose reicht DB_USER/DB_PASSWORD/DB_HOST/DB_NAME an den Container weiter, aber DATABASE_URL wird erst beim Container-Start im entrypoint.sh aus diesen Komponenten zusammengebaut und exportiert. `docker exec` startet eine neue Shell, die das exportierte DATABASE_URL nicht erbt → ./scripts/admin-rescue.sh brach mit "Environment variable not found: DATABASE_URL" ab. src/lib/prisma.ts macht jetzt dieselbe URL-Konstruktion einmal zentral. Damit funktionieren alle Wartungsskripte (reset-admin- password, cleanup-xss-and-mass-assignment) bei docker exec ohne Wrapper-Hack. Server-Start ist unbeeinflusst (DATABASE_URL ist da schon gesetzt). Live-verifiziert lokal: env -u DATABASE_URL DB_USER=... npx tsx prisma/reset-admin-password.ts admin@admin.com → success. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,22 @@
|
||||
import { PrismaClient, Prisma } from '@prisma/client';
|
||||
import { setBeforeValues, setAfterValues } from '../middleware/auditContext.js';
|
||||
|
||||
// DATABASE_URL aus DB_*-Komponenten bauen, falls nicht explizit gesetzt.
|
||||
// Der entrypoint.sh macht das ebenfalls (für den Server-Start). Aber bei
|
||||
// `docker exec opencrm-app npx tsx prisma/<script>.ts` läuft eine neue
|
||||
// Shell ohne diese exportierte Variable – die DB_*-Vars sind aus dem
|
||||
// docker-compose.yml vererbt, DATABASE_URL aber nicht. Damit alle
|
||||
// Wartungsskripte (reset-admin-password, cleanup-xss-...) und Server
|
||||
// dieselbe Logik nutzen, machen wir es einmal zentral hier.
|
||||
if (!process.env.DATABASE_URL && process.env.DB_USER && process.env.DB_PASSWORD && process.env.DB_NAME) {
|
||||
const u = encodeURIComponent(process.env.DB_USER);
|
||||
const p = encodeURIComponent(process.env.DB_PASSWORD);
|
||||
const h = process.env.DB_HOST || 'db';
|
||||
const port = process.env.DB_PORT || '3306';
|
||||
const n = process.env.DB_NAME;
|
||||
process.env.DATABASE_URL = `mysql://${u}:${p}@${h}:${port}/${n}`;
|
||||
}
|
||||
|
||||
// Modelle die für Before/After-Tracking relevant sind
|
||||
const AUDITED_MODELS = [
|
||||
'Customer',
|
||||
|
||||
Reference in New Issue
Block a user