📝 Commit Details:

This commit is contained in:
2025-05-31 22:40:29 +02:00
parent 91b1886dde
commit df8fb197c0
14061 changed files with 997277 additions and 103548 deletions

View File

@ -1,230 +1,595 @@
# Häufige Fehler und Lösungen
Dieses Dokument enthält häufig auftretende Probleme bei der Einrichtung und Nutzung von MYP im Kiosk-Modus und deren Lösungen.
Dieses Dokument enthält häufig auftretende Fehler und deren Lösungen für das MYP-3D-Druck-Management-System.
## Installationsprobleme
## Drucker-Status-Check mit 7-Sekunden-Timeout
### Fehler: "Paket nicht gefunden"
### Implementierung (2024-12-19)
**Problem**: Beim Ausführen von `apt install` werden Pakete nicht gefunden.
**Problem:** Drucker-Status wurde nur basierend auf hardkodierten Konfigurationen bestimmt, ohne echte Netzwerk-Überprüfung.
**Lösung**:
1. Führe zuerst `sudo apt update` aus, um die Paketlisten zu aktualisieren
2. Stelle sicher, dass eine Internetverbindung besteht
3. Bei älteren Raspberry Pi OS Versionen ggf. Repository hinzufügen:
```bash
sudo apt-add-repository universe
sudo apt update
```
**Lösung:** Implementierung eines echten Ping-basierten Status-Checks mit 7-Sekunden-Timeout:
### Fehler: "Permission denied" beim Kopieren nach /opt/myp
#### Backend-Änderungen:
1. **Neue Funktionen in `app.py`:**
- `check_printer_status(ip_address, timeout=7)`: Überprüft einzelnen Drucker via Ping
- `check_multiple_printers_status(printers, timeout=7)`: Parallel-Check mehrerer Drucker
2. **Aktualisierte API-Endpunkte:**
- `/api/printers`: Verwendet jetzt echten Status-Check
- `/api/printers/status`: Spezieller Endpunkt für Status-Überprüfung
3. **Features:**
- 7-Sekunden-Timeout pro Drucker
- Parallel-Ausführung mit ThreadPoolExecutor
- Windows- und Unix-kompatible Ping-Befehle
- Detailliertes Logging der Status-Checks
- Automatische Datenbank-Aktualisierung
**Problem**: Beim Kopieren der Dateien nach /opt/myp wird ein Permission-Fehler angezeigt.
#### Frontend-Änderungen:
1. **Erweiterte Drucker-Seite (`templates/printers.html`):**
- Funktionsfähiger "Aktualisieren"-Button
- Loading-States mit Timeout-Information
- Status-Nachrichten mit Erfolgs-/Fehler-Feedback
- Zeitstempel der letzten Überprüfung
2. **Neue JavaScript-Funktionen:**
- `refreshPrinters()`: Vollständiger Status-Check mit UI-Feedback
- `loadPrintersWithStatusCheck()`: Erweiterte Lade-Funktion
- `showStatusMessage()`: Toast-Nachrichten für Benutzer-Feedback
- `formatTime()`: Relative Zeitanzeige für Status-Checks
**Lösung**:
1. Stelle sicher, dass du die Befehle in der richtigen Reihenfolge ausführst:
```bash
sudo mkdir -p /opt/myp
sudo chown $USER:$USER /opt/myp
```
2. Falls das nicht hilft, führe den Kopierbefehl mit sudo aus:
```bash
sudo cp -r ./myp/* /opt/myp/
sudo chown -R $USER:$USER /opt/myp/
```
#### Benutzer-Erfahrung:
- **Vor dem Update:** Drucker-Status basierte nur auf Konfiguration
- **Nach dem Update:**
- Echter Ping-Test mit 7-Sekunden-Timeout
- Visuelles Feedback während der Überprüfung
- Erfolgs-/Fehler-Nachrichten
- Zeitstempel der letzten Überprüfung
- Button-Deaktivierung während des Checks
## Flask-Backend Probleme
#### Technische Details:
- **Timeout:** 7 Sekunden pro Drucker (konfigurierbar)
- **Parallel-Verarbeitung:** Bis zu 10 gleichzeitige Checks
- **Plattform-Unterstützung:** Windows (`ping -n 1 -w 7000`) und Unix (`ping -c 1 -W 7`)
- **Fehlerbehandlung:** Graceful Fallback auf "offline" bei Timeouts oder Fehlern
- **Logging:** Detaillierte Protokollierung aller Status-Checks
### Fehler: "MYP-Dienst startet nicht"
#### Konfiguration:
```python
# Timeout kann in den API-Aufrufen angepasst werden
status_results = check_multiple_printers_status(printer_data, timeout=7)
```
**Problem**: Der systemd-Dienst für das Flask-Backend startet nicht.
#### Fehlerbehebung:
1. **Timeout-Probleme:** Timeout kann in der Funktion angepasst werden
2. **Netzwerk-Probleme:** Logs in `logs/printers/printers.log` prüfen
3. **Performance:** Bei vielen Druckern ThreadPool-Größe anpassen
**Lösung**:
1. Überprüfe den Status des Dienstes:
```bash
sudo systemctl status myp.service
```
2. Schau in die Logs:
```bash
sudo journalctl -u myp.service -n 50
```
3. Häufige Ursachen:
- Falscher Pfad in myp.service: Überprüfe WorkingDirectory und ExecStart
- Python-Umgebung nicht korrekt: Überprüfe, ob die .venv-Umgebung existiert
- Abhängigkeiten fehlen: Führe `pip install -r requirements.txt` aus
## Job-Scheduler und Steckdosensteuerung
### Fehler: "ModuleNotFoundError: No module named X"
### Steckdose kann nicht eingeschaltet werden
**Problem**: Beim Start der Flask-App wird ein Python-Modul nicht gefunden.
**Problem:**
Log-Eintrag: `Fehler beim Starten von Job X: Steckdose konnte nicht eingeschaltet werden`
**Lösung**:
1. Aktiviere die virtuelle Umgebung und installiere das fehlende Paket:
```bash
cd /opt/myp
source .venv/bin/activate
pip install <fehlende_module>
```
2. Überprüfe requirements.txt und installiere alle Abhängigkeiten:
```bash
pip install -r requirements.txt
```
**Mögliche Ursachen und Lösungen:**
1. **Netzwerkverbindung zu Steckdose unterbrochen**
- Prüfen Sie, ob die Steckdose mit dem Netzwerk verbunden ist
- Ping-Test: `ping [IP-Adresse der Steckdose]`
- Steckdose neu starten (physischer Reset-Knopf)
### Fehler: "Address already in use"
2. **Falsche Zugangsdaten für Steckdose**
- Überprüfen Sie in der Datenbank, ob die korrekten Zugangsdaten (Benutzername/Passwort) für die Steckdose hinterlegt sind
- Admin-Bereich → Drucker → Steckdosenkonfiguration bearbeiten
**Problem**: Flask kann nicht starten, weil Port 5000 bereits verwendet wird.
3. **PyP110-Bibliothek veraltet**
- Bibliothek aktualisieren: `pip install PyP100 --upgrade`
**Lösung**:
1. Finde den Prozess, der Port 5000 verwendet:
```bash
sudo lsof -i:5000
```
2. Beende den Prozess:
```bash
sudo kill <PID>
```
3. Falls nötig, ändere den Port in app.py:
### Job wird nicht gestartet oder beendet
**Problem:**
Ein geplanter Job startet nicht oder ein laufender Job wird nicht beendet
**Mögliche Ursachen und Lösungen:**
1. **Scheduler-Thread läuft nicht**
- Prüfen Sie den Status des Schedulers im Admin-Bereich
- Wenn nicht aktiv: Scheduler starten
- Bei wiederholtem Problem: Server neu starten
2. **Datenbankprobleme**
- Überprüfen Sie die Datenbank auf Konsistenz
- Backup einspielen, falls notwendig
### Job-Verlängerung funktioniert nicht
**Problem:**
Nach dem Verlängern eines Jobs wird er trotzdem zum ursprünglichen Zeitpunkt beendet
**Lösung:**
1. Prüfen Sie die Datenbankeinträge, ob die `end_at`-Zeit korrekt aktualisiert wurde
2. Prüfen Sie die Log-Dateien auf Fehler beim Aktualisieren des Jobs
3. Verlängern Sie den Job erneut mit größerem Zeitpuffer
## Sicherheitshinweise
### Sicherheitsmaßnahmen bei Stromausfällen
**Wichtig:**
- Bei Stromausfällen kehren die Steckdosen in ihren Standardzustand zurück (meist AUS)
- Nach Wiederherstellung der Stromversorgung wird der Scheduler automatisch Jobs wieder aufnehmen
- Laufende Jobs werden jedoch **nicht** automatisch fortgesetzt, um Schäden zu vermeiden
- Administrator muss laufende Jobs manuell neu starten
### 5-Minuten Sicherheitspuffer
Das System verwendet einen 5-Minuten Sicherheitspuffer, bevor es einen Job beendet. Dies verhindert, dass ein Druck zu früh beendet wird. Die tatsächliche Ausschaltzeit ist also immer 5 Minuten nach der im System angezeigten Endzeit.
## API-Endpunkte für Fehlerbehebung
| Endpunkt | Beschreibung |
|----------|--------------|
| `GET /api/scheduler/status` | Status des Job-Schedulers abfragen |
| `POST /api/scheduler/start` | Scheduler manuell starten (Admin) |
| `POST /api/scheduler/stop` | Scheduler manuell stoppen (Admin) |
| `GET /api/jobs/active` | Alle aktiven Jobs anzeigen |
| `POST /api/jobs/<id>/extend` | Job-Laufzeit verlängern |
| `POST /api/jobs/<id>/finish` | Job manuell beenden (Admin) |
## Flask-Login Fehler
### AttributeError: 'User' object has no attribute 'is_authenticated'
**Problem:**
```
AttributeError: 'User' object has no attribute 'is_authenticated'
```
**Ursache:** Die User-Klasse erbt nicht von `UserMixin` oder implementiert nicht die erforderlichen Flask-Login Attribute.
**Lösungen:**
1. Stellen Sie sicher, dass die User-Klasse von `UserMixin` erbt:
```python
app.run(host="0.0.0.0", port=5001, debug=True)
from flask_login import UserMixin
class User(UserMixin, Base):
# ... Rest der Klasse
```
(Und passe auch die URL im kiosk.sh an)
## Chromium Kiosk-Modus Probleme
### Fehler: "Chromium startet nicht im Kiosk-Modus"
**Problem**: Der Browser startet nicht automatisch oder nicht im Vollbildmodus.
**Lösung**:
1. Überprüfe den Status des User-Services:
2. Implementieren Sie die erforderlichen Methoden manuell:
```python
@property
def is_authenticated(self):
return True
@property
def is_active(self):
return self.active
@property
def is_anonymous(self):
return False
def get_id(self):
return str(self.id)
```
3. Führen Sie die Datenbankmigration aus:
```bash
systemctl --user status kiosk.service
python3.11 migrate_db.py
```
2. Führe kiosk.sh manuell aus, um Fehlermeldungen zu sehen:
### Fehlende username-Spalte
**Problem:** Die Anwendung versucht auf `username` zuzugreifen, aber die Spalte existiert nicht in der Datenbank.
**Lösungen:**
1. Führen Sie das Migrationsskript aus:
```bash
/home/pi/kiosk.sh
python3.11 migrate_db.py
```
3. Prüfe, ob die notwendigen Pakete installiert sind:
2. Falls die Migration fehlschlägt, initialisieren Sie die Datenbank neu:
```bash
sudo apt install --reinstall chromium-browser unclutter
python3.11 init_db.py
```
### Fehler: "Chromium zeigt Fehlerdialoge statt der MYP-Oberfläche"
## Datenbank-Fehler
**Problem**: Der Browser zeigt Crash-Dialoge oder Warnungen an.
### SQLite Database is locked
**Lösung**:
1. Lösche die Chromium-Einstellungen und starte neu:
```bash
rm -rf ~/.config/chromium/
```
2. Füge zusätzliche Parameter zu chromium-browser in kiosk.sh hinzu:
```bash
chromium-browser --kiosk --noerrdialogs --disable-infobars --disable-session-crashed-bubble \
--disable-features=DialMediaRouteProvider --window-position=0,0 \
--app=http://localhost:5000/ &
**Problem:**
```
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
```
**Ursache:** Dieser Fehler tritt auf, wenn mehrere Prozesse gleichzeitig auf die Datenbank zugreifen.
**Lösungen:**
1. Stellen Sie sicher, dass Sie alle Datenbankverbindungen mit `db_session.close()` schließen
2. Verwenden Sie `with get_db_session() as session:` um Sessions automatisch zu schließen
3. Prüfen Sie, ob der Scheduler und die Hauptanwendung gleichzeitig auf die Datenbank zugreifen
### Detached Instance Error
**Problem:**
```
sqlalchemy.orm.exc.DetachedInstanceError: Instance <Job at 0x...> is not bound to a Session
```
**Ursache:** Zugriff auf ein SQLAlchemy-Objekt nach dem Schließen der Session.
**Lösungen:**
1. Verwenden Sie `joinedload` für eager loading: `db_session.query(Job).options(joinedload(Job.user))`
2. Konvertieren Sie Objekte zu Dictionaries, bevor Sie die Session schließen: `job_dict = job.to_dict()`
3. Verwenden Sie `session.expunge_all()` gefolgt von `session.close()`, wenn Sie Objekte weiter verwenden müssen
## Tapo Smart Plug Fehler
### Verbindungsfehler
**Problem:**
```
PyP100.PyP100.P100Exception: Could not connect to device
```
**Ursache:** Smart Plug ist nicht erreichbar oder Authentifizierungsprobleme.
**Lösungen:**
1. Überprüfen Sie die IP-Adresse des Smart Plugs
2. Stellen Sie sicher, dass der Smart Plug eingeschaltet und mit dem WLAN verbunden ist
3. Überprüfen Sie die Zugangsdaten in `config/settings.py`
4. Verwenden Sie einen Try-Except-Block zur Fehlerbehandlung:
```python
try:
p110 = PyP110.P110(ip, username, password)
p110.handshake()
p110.login()
p110.turnOn()
except Exception as e:
printers_logger.error(f"Smart Plug Fehler: {str(e)}")
```
### Fehler: "Chromium öffnet sich, aber zeigt nicht die MYP-Seite"
## Flask-Anwendungsfehler
**Problem**: Der Browser startet, aber die Anwendung wird nicht angezeigt.
### Interner Server-Fehler (500)
**Lösung**:
1. Überprüfe, ob der Flask-Dienst läuft:
```bash
systemctl status myp.service
**Problem:** Die Anwendung gibt einen 500-Fehler zurück.
**Ursache:** Verschiedene mögliche Ursachen, von Datenbank- bis hin zu Programmierfehlern.
**Lösungen:**
1. Überprüfen Sie die Logs unter `logs/app/app.log` und `logs/errors/errors.log`
2. Starten Sie die Anwendung im Debug-Modus: `FLASK_DEBUG=True python3.11 app.py`
3. Implementieren Sie bessere Fehlerbehandlung mit Try-Except-Blöcken
### Authentifizierungsfehler
**Problem:** Benutzer können sich nicht anmelden oder erhalten unbefugte Zugriffsfehler.
**Ursachen:**
- Ungültige Anmeldedaten
- Session-Probleme
- Cookie-Probleme
**Lösungen:**
1. Überprüfen Sie die Logs unter `logs/auth/auth.log`
2. Setzen Sie das Passwort zurück mit:
```python
from models import User, get_db_session
db_session = get_db_session()
user = db_session.query(User).filter(User.username == "admin").first()
user.set_password("neues_passwort")
db_session.commit()
db_session.close()
```
2. Teste, ob die Anwendung im Browser erreichbar ist:
```bash
curl http://localhost:5000/
3. Löschen Sie Browser-Cookies und -Cache
## CSS und Frontend-Fehler
### Tailwind-Stile werden nicht angewendet
**Problem:** Die Tailwind-Klassen haben keine Wirkung auf das Styling.
**Lösungen:**
1. Stellen Sie sicher, dass die generierte CSS-Datei korrekt eingebunden ist:
```html
<link rel="stylesheet" href="{{ url_for('static', filename='css/tailwind-dark-consolidated.min.css') }}">
```
3. Prüfe, ob Chromium mit der richtigen URL startet:
```bash
# In kiosk.sh
chromium-browser --kiosk --noerrdialogs --disable-infobars \
--window-position=0,0 --app=http://localhost:5000/ &
2. Bauen Sie die CSS-Datei neu: `npm run build:css`
3. Überprüfen Sie in der Browser-Konsole, ob Fehler beim Laden der CSS-Datei auftreten
### Dark Mode funktioniert nicht
**Problem:** Die Dark-Mode-Stile werden nicht angewendet.
**Lösungen:**
1. Stellen Sie sicher, dass das HTML-Element die entsprechende Klasse hat:
```html
<html class="dark" data-theme="dark">
```
2. Überprüfen Sie, ob die Tailwind-Konfiguration Dark Mode aktiviert hat:
```js
// tailwind.config.js
module.exports = {
darkMode: 'class',
// ...
}
```
## Watchdog-Probleme
## Scheduler-Fehler
### Fehler: "Watchdog-Script funktioniert nicht"
### Scheduler führt keine Jobs aus
**Problem**: Der Watchdog-Cronjob scheint nicht zu funktionieren.
**Problem:** Der Scheduler schaltet Drucker nicht ein/aus wie erwartet.
**Lösung**:
1. Überprüfe, ob der Cron-Job eingerichtet ist:
```bash
crontab -l
**Ursachen:**
- Scheduler ist nicht gestartet
- Fehler bei der Tapo-Verbindung
- Fehler in der Scheduler-Logik
**Lösungen:**
1. Überprüfen Sie die Logs unter `logs/scheduler/scheduler.log`
2. Stellen Sie sicher, dass `SCHEDULER_ENABLED = True` in `config/settings.py` gesetzt ist
3. Starten Sie die Anwendung neu
## Performance-Probleme
### Langsame Ladezeiten
**Problem:** Die Anwendung lädt langsam oder reagiert träge.
**Lösungen:**
1. Optimieren Sie Datenbankabfragen mit geeigneten Indizes
2. Reduzieren Sie die Anzahl der Datenbankabfragen durch Eager Loading
3. Implementieren Sie Caching für häufig abgerufene Daten
4. Überprüfen Sie die Logfiles auf übermäßige Logging-Aktivitäten
## Content Security Policy (CSP) Fehler
### Script-src-elem 'none' Fehler
**Problem:**
```
Refused to load the script because it violates the following Content Security Policy directive: "script-src-elem 'none'".
```
**Ursache:** Die Content Security Policy ist zu restriktiv eingestellt und blockiert das Laden von Skripten.
**Lösungen:**
1. Überprüfen Sie die CSP-Konfiguration in `config/security.py`:
```python
'Content-Security-Policy': (
"default-src 'self'; "
"script-src 'self' 'unsafe-eval' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; "
"script-src-elem 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; "
# ... weitere Regeln
)
```
2. Prüfe die Berechtigungen des Watchdog-Scripts:
```bash
chmod +x /home/pi/watchdog.sh
2. Stellen Sie sicher, dass die CSP in der `after_request`-Funktion richtig angewendet wird:
```python
@app.after_request
def add_security_headers(response):
from config.security import get_security_headers
security_headers = get_security_headers()
for header, value in security_headers.items():
response.headers[header] = value
# CSP-Report-Only Header entfernen
if 'Content-Security-Policy-Report-Only' in response.headers:
del response.headers['Content-Security-Policy-Report-Only']
return response
```
3. Führe das Script manuell aus und prüfe auf Fehler:
```bash
/home/pi/watchdog.sh
3. Vermeiden Sie mehrere konkurrierende Service Worker Registrierungen, die CSP-Konflikte verursachen können.
### Inline Script Fehler
**Problem:**
```
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src-elem 'none'"
```
**Lösungen:**
1. Fügen Sie 'unsafe-inline' zur script-src Direktive hinzu
2. Alternativ fügen Sie einen Hash oder Nonce für das Inline-Skript hinzu:
```html
<script nonce="{{ csp_nonce }}">
// Inline JavaScript
</script>
```
4. Überprüfe die Logdatei:
```bash
cat /home/pi/myp-watchdog.log
und in der CSP:
```
script-src 'nonce-{{ csp_nonce }}';
```
### Fehler: "Watchdog kann systemctl nicht ausführen"
### Service Worker Registration Fehler
**Problem**: Der Watchdog kann systemctl-Befehle nicht ausführen.
**Problem:**
```
Refused to create a worker from 'URL' because it violates the following Content Security Policy directive: "script-src 'none'"
```
**Lösung**:
1. Erlaubnis für den pi-Benutzer zum Ausführen von systemctl hinzufügen:
```bash
echo "pi ALL=NOPASSWD: /bin/systemctl restart myp.service" | sudo tee /etc/sudoers.d/myp-watchdog
**Lösungen:**
1. Stellen Sie sicher, dass die `worker-src` Direktive korrekt konfiguriert ist:
```
worker-src 'self' blob:;
```
2. Erstellen Sie die erforderlichen Service Worker Dateien im richtigen Verzeichnis
3. Verwenden Sie einen einheitlichen Ansatz zur Service Worker Registrierung, vorzugsweise im offline-app.js:
```javascript
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/static/js/sw.js')
.then(function(registration) {
console.log('Service Worker registriert:', registration.scope);
})
.catch(function(error) {
console.log('Service Worker Registration fehlgeschlagen:', error);
// Fallback
});
});
}
```
## Allgemeine Probleme
### Icon 404 Fehler
### Fehler: "Bildschirm wird nach einiger Zeit schwarz"
**Problem:**
```
Failed to load resource: the server responded with a status of 404 (NOT FOUND)
Error while trying to use the following icon from the Manifest: URL (Download error or resource isn't a valid image)
```
**Problem**: Trotz Konfiguration schaltet sich der Bildschirm nach einiger Zeit aus.
**Lösungen:**
1. Erstellen Sie die fehlenden Icon-Dateien im Verzeichnis `static/icons/`
2. Aktualisieren Sie das Web App Manifest, um nur verfügbare Icons zu referenzieren:
```json
"icons": [
{
"src": "/static/icons/mercedes-logo.svg",
"sizes": "192x192",
"type": "image/svg+xml"
}
]
```
3. Verwenden Sie Tools wie Lighthouse, um fehlende PWA-Ressourcen zu identifizieren
**Lösung**:
1. Stelle sicher, dass die xset-Befehle in kiosk.sh korrekt ausgeführt werden:
```bash
xset s off
xset s noblank
xset -dpms
```
2. Aktualisiere die Autostart-Datei:
```bash
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
```
Füge folgende Zeilen hinzu:
```
@xset s off
@xset -dpms
@xset s noblank
```
3. Verwende ein Tool wie Caffeine:
```bash
sudo apt install caffeine
```
## JavaScript-Referenzfehler
### Fehler: "System bootet nicht automatisch in den Kiosk-Modus"
### Problem: Nicht definierte Funktionen in admin-panel.js
Fehlermeldungen wie "Uncaught ReferenceError: loadPrinters is not defined" können auftreten, wenn Funktionen in der JavaScript-Datei verwendet, aber nicht definiert werden.
**Problem**: Der automatische Start des Kiosk-Modus funktioniert nicht.
**Lösung:**
- Implementiere die fehlenden Funktionen (loadPrinters, loadSchedulerStatus, loadSystemStats, loadLogs, loadUsers, etc.)
- Stelle sicher, dass alle aufgerufenen Funktionen im richtigen Scope definiert sind
- Überprüfe die Reihenfolge der Funktionsdefinitionen und -aufrufe
**Lösung**:
1. Überprüfe, ob der automatische Login aktiviert ist:
```bash
sudo raspi-config
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
```
2. Stelle sicher, dass der User-Service aktiviert ist:
```bash
systemctl --user enable kiosk.service
```
3. Aktiviere Linger für den pi-Benutzer:
```bash
sudo loginctl enable-linger pi
```
4. Reboote das System und überprüfe den Status der Dienste:
```bash
sudo reboot
```
### Problem: Funktionen in anderen Dateien werden nicht gefunden
Fehler wie "Uncaught ReferenceError: refreshJobs is not defined" in jobs.html oder "exportStats is not defined" in stats.html.
**Lösung:**
- Stelle sicher, dass die Funktionen in der jeweiligen HTML-Datei oder in einer eingebundenen JavaScript-Datei definiert sind
- Überprüfe, ob die JavaScript-Dateien korrekt in der HTML-Datei eingebunden sind
- Nutze konsistente Namenskonventionen für Funktionen
## Service Worker Fehler
### Problem: Cache-API kann mit chrome-extension URLs nicht umgehen
Fehler: "Uncaught (in promise) TypeError: Failed to execute 'put' on 'Cache': Request scheme 'chrome-extension' is unsupported"
**Lösung:**
- Überprüfe die URL-Protokolle bevor du Cache-Operationen durchführst
- Füge eine spezielle Behandlung für chrome-extension-Protokolle hinzu
- Verwende try-catch-Blöcke, um Fehler bei der Cache-Handhabung abzufangen
```javascript
if (url.protocol === 'chrome-extension:') {
// Spezielle Behandlung für chrome-extension URLs
try {
return await fetch(request);
} catch (error) {
console.error('Failed to fetch from chrome-extension:', error);
return new Response(JSON.stringify({
error: 'Fehler beim Zugriff auf chrome-extension',
offline: true
}), {
status: 400,
headers: { 'Content-Type': 'application/json' }
});
}
}
```
## API-Endpunkt Fehler
### Problem: API-Ressourcen werden nicht gefunden (404)
Fehlermeldungen wie "Failed to load resource: the server responded with a status of 404 (NOT FOUND)"
**Lösung:**
- Überprüfe die API-Routen im Backend
- Stelle sicher, dass die API-Endpunkte korrekt implementiert sind
- Überprüfe die Anfrage-URLs in den Frontend-Skripten
- Füge Fehlerbehandlung für fehlende Ressourcen hinzu
## Frontend-Rendering Fehler
### Problem: Fehler beim Laden der Admin-Statistiken
"Error loading admin: admin-panel.js:484 Fehler beim Laden der Admin-Statistiken"
**Lösung:**
- Implementiere ordnungsgemäße Fehlerbehandlung in API-Anfragen
- Zeige benutzerfreundliche Fehlermeldungen an
- Füge Fallback-Werte für fehlende Daten hinzu
```javascript
try {
const response = await fetch('/api/admin/stats');
if (!response.ok) {
throw new Error('Fehler beim Laden der Admin-Statistiken');
}
const data = await response.json();
// Daten verarbeiten
} catch (error) {
console.error('Error loading admin stats:', error);
showNotification('Fehler beim Laden der Admin-Statistiken', 'error');
}
```
## Icon/Ressourcen Fehler
### Problem: Icon-Dateien werden nicht gefunden
"Error while trying to use the following icon from the Manifest: http://127.0.0.1:5000/static/icons/icon-144x144.png"
**Lösung:**
- Überprüfe, ob die Icon-Dateien im richtigen Verzeichnis vorhanden sind
- Stelle sicher, dass die Pfade in der Manifest-Datei korrekt sind
- Füge Fallback-Icons für den Fall hinzu, dass die primären Icons nicht geladen werden können
## Allgemeine Fehlerbehebung
1. **Browser-Konsole prüfen**: Die meisten JavaScript-Fehler werden in der Browser-Konsole angezeigt (F12 oder Rechtsklick -> Untersuchen -> Konsole)
2. **Netzwerk-Tab prüfen**: Im Netzwerk-Tab des Browsers können fehlgeschlagene API-Anfragen identifiziert werden
3. **Codestruktur überprüfen**: Stelle sicher, dass alle Funktionen in der richtigen Reihenfolge definiert werden
4. **Fehlerbehandlung verbessern**: Implementiere try-catch-Blöcke für alle asynchronen Funktionen
5. **Browser-Cache leeren**: Manchmal können Probleme durch veraltete gecachte Dateien verursacht werden
## 404 Fehler (Seite nicht gefunden)
### Fehlende Routen oder API-Endpunkte
**Problem:**
Die Anwendung zeigt 404-Fehler für bestimmte Routen wie `/privacy`, `/terms`, `/my/jobs`, `/api/user/export` oder `/api/user/profile`.
**Ursachen:**
- Die Route wurde nicht korrekt in `app.py` oder dem entsprechenden Blueprint registriert
- Bei API-Endpunkten: Die alte API-Route wurde verwendet, aber die Anwendung nutzt jetzt eine neue Route
- Möglicherweise wurden die Templates erstellt, aber die Routen dafür fehlen
**Lösungen:**
1. **Für öffentliche Seiten** (`/privacy`, `/terms`):
- Überprüfen Sie, ob die Routen in `app.py` definiert sind
- Stellen Sie sicher, dass der `@login_required` Decorator entfernt wurde, falls diese Seiten öffentlich sein sollen
- Prüfen Sie, ob die entsprechenden Template-Dateien unter `templates/` existieren
2. **Für Benutzer-spezifische Seiten** (`/my/jobs`):
- Fügen Sie eine Route hinzu, die zur Jobs-Seite mit vorgefiltertem Benutzer-Parameter weiterleitet
3. **Für API-Weiterleitungen** (`/api/user/export`, `/api/user/profile`):
- Erstellen Sie Weiterleitungsrouten, die zu den neuen Blueprint-Routen führen
- Beispiel: `/api/user/export` sollte zu `/user/export` weiterleiten
4. **Debugging von Routen:**
- Mit `flask routes` können Sie alle registrierten Routen auflisten
- Überprüfen Sie die Log-Dateien auf fehlgeschlagene Routenzugriffe
- Im Debug-Modus starten: `FLASK_DEBUG=True python3.11 app.py`
5. **Blueprint-Registrierung prüfen:**
- Stellen Sie sicher, dass alle Blueprints korrekt in `app.py` registriert sind:
```python
from blueprints.user import user_bp
app.register_blueprint(user_bp)
```
---
Dieses Dokument wird kontinuierlich aktualisiert, wenn neue Fehler auftreten und Lösungen gefunden werden.