- Fixed a critical in the company-explorer by forcing a database re-initialization with a new file (). This ensures the application code is in sync with the database schema. - Documented the schema mismatch incident and its resolution in MIGRATION_PLAN.md. - Restored and enhanced BUILDER_APPS_MIGRATION.md by recovering extensive, valuable content from the git history that was accidentally deleted. The guide now again includes detailed troubleshooting steps and code templates for common migration pitfalls.
5.7 KiB
5.7 KiB
Migration Guide: Google AI Builder Apps -> Local Docker Stack
CRITICAL WARNINGS & BEST PRACTICES (READ BEFORE MIGRATION):
- DIE GOLDENE REGEL DER STRINGS: Nutze NIEMALS
f"""..."""für komplexe Prompts oder Listen-Operationen mit verschachtelten Keys. Es führt unweigerlich zuSyntaxError: unterminated string literal. Nutze AUSSCHLIESSLICH Triple Raw Quotes (r"""...""") und die.format()Methode.- SDK WAHL (DUAL SDK): Das moderne
google-genaiist gut, aber das Legacygoogle-generativeaiist oft stabiler für reinen Text (gemini-2.0-flash). Nutze die "Dual SDK Strategy", um beide je nach Bedarf zu verwenden.- GROUNDED TRUTH (MUSS): Verlasse dich niemals auf das Wissen des Modells allein. Implementiere immer Web-Scraping (Homepage + Unterseiten) und SerpAPI-suchen, um das Modell mit Fakten zu füttern.
- DOCKER VOLUMES: Mounte nur spezifische Dateien, niemals den
dist-Ordner überschreiben. Bei Syntax-Fehlern, die trotz Korrektur bleiben:docker-compose build --no-cache.
0. Der "Quick-Start" Checkliste (5-Minuten-Plan)
- SDKs: Stehen
google-genaiUNDgoogle-generativeaiin derrequirements.txt? - Prompts: Sind alle Prompts als
r"""...""".format()angelegt? - Grounding: Wird vor dem KI-Call die Webseite der Firma gescrapt?
- Package.json: Sind Build-Tools (
vite,typescript) independencies(NICHTdevDependencies)? - Vite Config: Ist
base: './'gesetzt? - DB-Datei: Wurde die leere
.db-Datei auf dem Host viatoucherstellt?
1. Detaillierte Fehlerlösungen & Code-Vorlagen
Dieser Abschnitt enthält die aus der Git-Historie wiederhergestellten "Lessons Learned".
1.1 Python: Abhängigkeiten & SDKs (Häufigste Fehlerquelle)
Problem 1: ModuleNotFoundError bei geteilten Bibliotheken
- Fehler: Eine kleine App stürzt ab, weil sie
helpers.pyimportiert, aber nicht alle darin verwendeten Bibliotheken (z.B.gspread,pandas) in ihrer eigenenrequirements.txthat. - Lösung (in
helpers.py): "Exotische" Importe optional machen.try: import gspread GSPREAD_AVAILABLE = True except ImportError: GSPREAD_AVAILABLE = False gspread = None # Wichtig, damit Referenzen nicht fehlschlagen - Lösung (in
requirements.txtder App): Nur die direkt für die App benötigten Pakete auflisten. Nicht blind die globalerequirements.txtkopieren. Für eine typische App sind das oft nur:google-generativeai google-genai Pillow requests beautifulsoup4
Problem 2: ImportError für Schema oder Content
- Fehler:
ImportError: cannot import name 'Schema' from 'google.generativeai.types' - Ursache: Der Code ist für eine neuere Version des
google-generativeai-SDK geschrieben, aber im Projekt ist eine ältere Version (z.B.0.3.0) installiert, in der diese Klassen anders hießen oder nicht existierten. - Lösung (für Legacy SDKs):
- Entferne die direkten Importe für
SchemaundContent. - Übergebe Konfigurationen wie
generation_configals einfaches Python-Dictionary. Das alte SDK ist damit zufrieden.
- Entferne die direkten Importe für
Problem 3: AttributeError: module 'google.generativeai' has no attribute 'Client'
- Ursache: Der Code verwendet eine veraltete API (
genai.Client), die im SDK entfernt wurde. - Lösung: Den Code auf die moderne
GenerativeModel-API umstellen.genai.configure(api_key="YOUR_KEY") model = genai.GenerativeModel('gemini-1.5-flash-latest') response = model.generate_content(...)
1.2 Frontend: Build-Prozess & Server
Problem 1: npm run build schlägt im Docker-Container fehl
- Ursache: Wichtige Build-Tools (
vite,typescriptetc.) stehen fälschlicherweise indevDependenciesin derpackage.json. Der Docker-Build installiert diese standardmäßig nicht. - Lösung: Alle
devDependenciesin diedependenciesverschieben.
Problem 2: "White Screen" - App lädt nicht
- Ursache: Die App wird unter einem Unterpfad (z.B.
/ce/) bereitgestellt, aber Vite sucht die JS/CSS-Dateien im Root (/). - Lösung (in
vite.config.ts): Den Basispfad anpassen.export default defineConfig({ base: './', // Zwingt Vite, relative Pfade zu nutzen });
1.3 Docker & Datenbank
Problem 1: OperationalError: no such table
- Ursache: Die
.db-Datei wurde zwar mittoucherstellt, ist aber leer. Die Tabellen wurden nie initialisiert. - Lösung: Die Datenbank-Initialisierung (z.B.
python3 db_manager.py init) MUSS beim Start desserver.cjsautomatisch ausgeführt werden.// In server.cjs am Anfang const { spawn } = require('child_process'); const dbScript = path.join(__dirname, 'gtm_db_manager.py'); // Pfad anpassen spawn('python3', [dbScript, 'init']);
Problem 2: Code-Änderungen werden nicht übernommen ("Geisterfehler")
- Ursache: Ein Volume-Mount in
docker-compose.ymlüberschreibt die neueren Dateien im Image mit alten, lokalen Dateien. Besonders tückisch, wennserver.cjsan die falsche Stelle gemountet wird. - Lösung:
- Immer
git pullauf dem Host ausführen, bevordocker-compose buildaufgerufen wird. - Mount-Pfade präzise setzen. Wenn das Dockerfile
server.cjsin/app/server.cjskopiert, muss der Mount genau dorthin zeigen:volumes: - ./my-app-folder/server.cjs:/app/server.cjs # Korrekt - ./my-app-folder/:/app/my-app-folder/ # Falsch
- Immer
Dokumentation wiederhergestellt und erweitert am 15.01.2026.