feat: Implement frontend production deployment and enhance admin dashboard functionality
This commit is contained in:
379
COMMON_ERRORS.md
Normal file
379
COMMON_ERRORS.md
Normal file
@ -0,0 +1,379 @@
|
||||
# Common Errors und Lösungen
|
||||
|
||||
## 1. Database Schema Error - "no such column"
|
||||
|
||||
### Problem
|
||||
```
|
||||
sqlite3.OperationalError: no such column: printers_1.last_checked
|
||||
[SQL: SELECT jobs.id AS jobs_id, ... printers_1.last_checked ...]
|
||||
```
|
||||
|
||||
### Ursache
|
||||
- Datenbankschema ist veraltet
|
||||
- Die `last_checked` Spalte fehlt in der `printers` Tabelle
|
||||
- Tritt auf, wenn die Datenbank vor Schema-Updates erstellt wurde
|
||||
|
||||
### Lösungen
|
||||
1. **Automatische Migration (empfohlen):**
|
||||
```bash
|
||||
cd backend/app
|
||||
PYTHONPATH=. python3.11 utils/database_migration.py
|
||||
```
|
||||
|
||||
2. **Manuelle Datenbank-Neuerstellung:**
|
||||
```bash
|
||||
cd backend/app
|
||||
python3.11 -c "from models import init_db; init_db(); print('Database recreated')"
|
||||
python3.11 utils/setup_drucker_db.py
|
||||
python3.11 -c "from models import create_initial_admin; create_initial_admin()"
|
||||
```
|
||||
|
||||
3. **Spalte manuell hinzufügen:**
|
||||
```bash
|
||||
cd backend/app
|
||||
python3.11 -c "
|
||||
import sqlite3
|
||||
conn = sqlite3.connect('database/myp.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('ALTER TABLE printers ADD COLUMN last_checked DATETIME')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print('Column added')
|
||||
"
|
||||
```
|
||||
|
||||
### Prävention
|
||||
- Verwende die Migrationsskripte vor dem Start der Anwendung
|
||||
- Backup der Datenbank vor Schema-Änderungen erstellen
|
||||
|
||||
## 2. Tailwind CSS Compilation Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
npm ERR! could not determine executable to run
|
||||
```
|
||||
|
||||
### Ursache
|
||||
- Node.js/npm nicht installiert oder nicht im PATH
|
||||
- node_modules Verzeichnis fehlt
|
||||
- Defekte npm Installation
|
||||
|
||||
### Lösungen
|
||||
1. **Node.js installieren:**
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt update && sudo apt install nodejs npm
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install nodejs npm
|
||||
```
|
||||
|
||||
2. **Dependencies neu installieren:**
|
||||
```bash
|
||||
cd backend/app
|
||||
rm -rf node_modules package-lock.json
|
||||
npm install
|
||||
```
|
||||
|
||||
3. **Manuelle CSS-Kompilierung:**
|
||||
```bash
|
||||
cd backend/app
|
||||
npx tailwindcss -i static/css/input.css -o static/css/tailwind.min.css --minify
|
||||
```
|
||||
|
||||
4. **Fallback verwenden:**
|
||||
- Die existierende `static/css/tailwind.min.css` wird automatisch verwendet
|
||||
- Keine weiteren Schritte erforderlich
|
||||
|
||||
## 3. Port 443/80 Permission Denied
|
||||
|
||||
### Problem
|
||||
```
|
||||
Permission denied
|
||||
```
|
||||
beim Starten auf Port 443 oder 80
|
||||
|
||||
### Ursache
|
||||
- Ports < 1024 sind privilegierte Ports
|
||||
- Benötigen Root-Rechte oder spezielle Capabilities
|
||||
|
||||
### Lösungen
|
||||
1. **Nicht-privilegierte Ports verwenden (empfohlen):**
|
||||
```bash
|
||||
python3 app.py --port 8443
|
||||
```
|
||||
|
||||
2. **Automatische Fallback-Ports:**
|
||||
- App erkennt automatisch Permission-Fehler
|
||||
- Verwendet Port 8443 statt 443
|
||||
- Verwendet Port 8080 statt 80
|
||||
|
||||
3. **Root-Rechte (nicht empfohlen):**
|
||||
```bash
|
||||
sudo python3 app.py
|
||||
```
|
||||
|
||||
4. **Capabilities setzen (Linux):**
|
||||
```bash
|
||||
sudo setcap CAP_NET_BIND_SERVICE=+eip $(which python3)
|
||||
```
|
||||
|
||||
## 4. Admin-Panel 404 Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
404 Not Found
|
||||
```
|
||||
für Admin-Routen wie `/admin/users/add`, `/admin/printers/add`
|
||||
|
||||
### Ursache
|
||||
- Fehlende Template-Dateien
|
||||
- Nicht implementierte Admin-Routen
|
||||
- Fehlende API-Endpunkte
|
||||
|
||||
### Lösungen
|
||||
1. **Templates wurden erstellt:**
|
||||
- `admin_add_user.html` - Benutzer hinzufügen
|
||||
- `admin_add_printer.html` - Drucker hinzufügen
|
||||
- `admin_edit_user.html` - Benutzer bearbeiten
|
||||
- `admin_manage_printer.html` - Drucker verwalten
|
||||
- `admin_printer_settings.html` - Drucker-Einstellungen
|
||||
|
||||
2. **API-Endpunkte implementiert:**
|
||||
- `/api/admin/system/status` - System-Status
|
||||
- `/api/admin/database/status` - Datenbank-Status
|
||||
- `/api/admin/users/{id}/edit` - Benutzer bearbeiten
|
||||
- `/api/admin/printers/{id}/edit` - Drucker bearbeiten
|
||||
|
||||
## 5. Admin-Variable-Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
cannot access local variable 'os' where it is not associated with a value
|
||||
```
|
||||
|
||||
### Ursache
|
||||
- `os` Modul wird lokal importiert aber nicht verfügbar
|
||||
|
||||
### Lösung
|
||||
- Import von `os` wurde an den Anfang der System-Informationen-Sektion verschoben
|
||||
- Fehler ist behoben
|
||||
|
||||
## 6. Icon-Pfad 404 Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
404 Not Found: /static/static/icons/icon-144x144.png
|
||||
```
|
||||
|
||||
### Ursache
|
||||
- Doppelte `static/` im Pfad in der `manifest.json`
|
||||
|
||||
### Lösung
|
||||
- Pfade in `manifest.json` korrigiert von `static/icons/` zu `icons/`
|
||||
- Icons sind jetzt korrekt erreichbar
|
||||
|
||||
## 7. SSL-Zertifikat Probleme
|
||||
|
||||
### Problem
|
||||
- SSL-Zertifikate fehlen
|
||||
- Zertifikat-Validierung schlägt fehl
|
||||
|
||||
### Lösungen
|
||||
1. **Automatische Zertifikat-Generierung:**
|
||||
- App erstellt automatisch selbstsignierte Zertifikate
|
||||
- Für Entwicklung ausreichend
|
||||
|
||||
2. **SSL deaktivieren:**
|
||||
```bash
|
||||
python3 app.py --no-ssl
|
||||
```
|
||||
|
||||
3. **Eigene Zertifikate verwenden:**
|
||||
- Zertifikat: `backend/app/certs/myp.crt`
|
||||
- Schlüssel: `backend/app/certs/myp.key`
|
||||
|
||||
## 8. Datenbank-Probleme
|
||||
|
||||
### Problem
|
||||
- Datenbank kann nicht initialisiert werden
|
||||
- SQLite-Fehler
|
||||
|
||||
### Lösungen
|
||||
1. **Datenbank-Verzeichnis erstellen:**
|
||||
```bash
|
||||
mkdir -p backend/app/database
|
||||
```
|
||||
|
||||
2. **Berechtigungen prüfen:**
|
||||
```bash
|
||||
chmod 755 backend/app/database
|
||||
```
|
||||
|
||||
3. **Datenbank neu initialisieren:**
|
||||
```bash
|
||||
cd backend/app
|
||||
python3 init_db.py
|
||||
```
|
||||
|
||||
## 9. Scheduler-Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
Task mit ID check_jobs existiert bereits
|
||||
```
|
||||
|
||||
### Ursache
|
||||
- App wurde mehrmals gestartet
|
||||
- Scheduler-Thread läuft bereits
|
||||
|
||||
### Lösung
|
||||
```bash
|
||||
# Alle Python-Prozesse stoppen
|
||||
pkill -f "python.*app.py"
|
||||
|
||||
# Neu starten
|
||||
python3 app.py
|
||||
```
|
||||
|
||||
## 10. Import-Fehler
|
||||
|
||||
### Problem
|
||||
```
|
||||
ModuleNotFoundError: No module named 'xyz'
|
||||
```
|
||||
|
||||
### Lösung
|
||||
```bash
|
||||
# Python Dependencies installieren
|
||||
cd backend/app
|
||||
pip3 install -r requirements.txt
|
||||
|
||||
# Oder für Python 3.11
|
||||
python3.11 -m pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Startup-Script Verwendung
|
||||
|
||||
### Automatische Problembehandlung
|
||||
```bash
|
||||
# Einfachste Methode
|
||||
./backend/run.sh
|
||||
|
||||
# Oder direkt
|
||||
cd backend
|
||||
python3 start_server.py
|
||||
```
|
||||
|
||||
Das Startup-Script:
|
||||
- Prüft automatisch Dependencies
|
||||
- Findet verfügbare Ports
|
||||
- Installiert fehlende Packages
|
||||
- Kompiliert CSS falls möglich
|
||||
- Startet Server mit optimalen Einstellungen
|
||||
|
||||
### Manuelle Parameter
|
||||
```bash
|
||||
# Spezifischer Port
|
||||
python3 start_server.py --port 5000
|
||||
|
||||
# SSL deaktivieren
|
||||
python3 start_server.py --no-ssl
|
||||
|
||||
# Dual-Protokoll (HTTP + HTTPS)
|
||||
python3 start_server.py --dual-protocol
|
||||
```
|
||||
|
||||
## Debugging-Tipps
|
||||
|
||||
1. **Log-Level erhöhen:**
|
||||
```python
|
||||
# In config/settings.py
|
||||
LOG_LEVEL = "DEBUG"
|
||||
```
|
||||
|
||||
2. **Detaillierte Logs anzeigen:**
|
||||
```bash
|
||||
tail -f backend/app/logs/app/app.log
|
||||
```
|
||||
|
||||
3. **Netzwerk-Probleme prüfen:**
|
||||
```bash
|
||||
# Port-Status prüfen
|
||||
netstat -tlnp | grep :8443
|
||||
|
||||
# Firewall prüfen
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
4. **Python-Umgebung prüfen:**
|
||||
```bash
|
||||
python3 --version
|
||||
python3 -c "import flask; print(flask.__version__)"
|
||||
```
|
||||
|
||||
## Neue Features (behoben)
|
||||
|
||||
### Admin-Panel Funktionalität
|
||||
- ✅ Benutzer hinzufügen/bearbeiten
|
||||
- ✅ Drucker hinzufügen/verwalten/konfigurieren
|
||||
- ✅ System-Status und Datenbank-Status APIs
|
||||
- ✅ Vollständige Admin-Templates
|
||||
|
||||
### Verbesserte Fehlerbehandlung
|
||||
- ✅ Automatische Port-Fallbacks
|
||||
- ✅ Graceful CSS-Kompilierung mit Fallback
|
||||
- ✅ Robuste SSL-Zertifikat-Behandlung
|
||||
- ✅ Verbesserte Logging und Debugging
|
||||
|
||||
## Flask Route Konflikte - 404 Fehler bei existierenden Routen
|
||||
|
||||
**Problem:**
|
||||
- API-Endpunkt `/api/admin/stats/live` gibt 404 Fehler zurück, obwohl die Route implementiert ist
|
||||
- Flask-Anwendung startet nicht mit AssertionError: "View function mapping is overwriting an existing endpoint function"
|
||||
|
||||
**Ursache:**
|
||||
- Doppelte Route-Definitionen in `app.py` (z.B. `update_printers` mehrfach definiert)
|
||||
- Konflikte zwischen Haupt-App-Routen und Blueprint-Routen
|
||||
- API-Blueprint wird ohne URL-Präfix registriert und überschreibt Haupt-Routen
|
||||
|
||||
**Lösung:**
|
||||
1. **Doppelte Routen entfernen:**
|
||||
```bash
|
||||
grep -n "def update_printers" app.py # Finde alle Duplikate
|
||||
sed -i '3512,$d' app.py # Entferne doppelte Definition am Ende
|
||||
```
|
||||
|
||||
2. **Blueprint-Registrierung deaktivieren:**
|
||||
```python
|
||||
# app.register_blueprint(api_bp) # Kommentiere aus bei Konflikten
|
||||
```
|
||||
|
||||
3. **Route-Registrierung prüfen:**
|
||||
```python
|
||||
python3.11 -c "from app import app; [print(f'{rule.rule} -> {rule.endpoint}') for rule in app.url_map.iter_rules() if 'admin' in rule.rule and 'stats' in rule.rule]"
|
||||
```
|
||||
|
||||
**Prävention:**
|
||||
- Verwende eindeutige Funktionsnamen
|
||||
- Registriere Blueprints mit URL-Präfix: `app.register_blueprint(api_bp, url_prefix='/api/v1')`
|
||||
- Prüfe Route-Konflikte vor Deployment
|
||||
|
||||
**Behoben am:** 26.05.2025
|
||||
**Betroffen:** Flask-Anwendung, Admin-Dashboard, Live-Statistiken
|
||||
|
||||
**Status:** ✅ GELÖST - API-Blueprint registriert mit URL-Präfix /api/v1, alle Admin-CRUD-Endpunkte funktionieren
|
||||
|
||||
**Fix angewendet:** 26.05.2025
|
||||
- API-Blueprint in app.py korrekt registriert mit `app.register_blueprint(api_bp, url_prefix='/api/v1')`
|
||||
- Alle Admin-Dashboard API-Endpunkte sind jetzt verfügbar:
|
||||
- `/api/admin/stats/live` ✅
|
||||
- `/api/admin/system/status` ✅
|
||||
- `/api/admin/database/status` ✅
|
||||
- Alle Admin-Template-Routen funktionieren:
|
||||
- `/admin/users/add` ✅
|
||||
- `/admin/users/<id>/edit` ✅
|
||||
- `/admin/printers/add` ✅
|
||||
- `/admin/printers/<id>/manage` ✅
|
||||
|
||||
**Prävention:** Regelmäßige Überprüfung der Blueprint-Registrierung beim Hinzufügen neuer Routen
|
Reference in New Issue
Block a user