8.1 KiB
8.1 KiB
BUSINESS_FORCE_EXECUTE - Test-Server Konfiguration
Übersicht
Die ENV-Variable BUSINESS_FORCE_EXECUTE erlaubt es, die Business-Commands auch an Tagen auszuführen, die nicht dem konfigurierten Ausführungstag entsprechen.
⚠️ WICHTIG: Diese Variable sollte NUR auf Test-Servern verwendet werden!
Verwendung
Auf Test-Server aktivieren
1. .env Datei bearbeiten:
# In .env Datei hinzufügen:
BUSINESS_FORCE_EXECUTE=true
2. Commands testen:
# Command kann jetzt an jedem Tag ausgeführt werden
php artisan business:store-optimized 0 0
# Erwartete Ausgabe:
# ⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
# ⚠️ Dies sollte NUR auf Test-Servern verwendet werden!
# ✅ Command wird ausgeführt...
Auf Live-Server DEAKTIVIEREN
In .env Datei auf Live-Server:
# NICHT setzen oder explizit auf false:
# BUSINESS_FORCE_EXECUTE=false
# Oder ganz weglassen (Standard ist false)
Vorteile der neuen Lösung
✅ Vor dem Fix (mit auskommentiertem return)
Problem:
if ($executeDay !== $presentDay) {
$this->info('NOT RUN ...');
// return 0; // ← Auskommentiert während Entwicklung
}
// ❌ Command läuft weiter, auch wenn er nicht sollte!
Nachteile:
- Entwickler vergisst Kommentar zu entfernen
- Command läuft versehentlich auf Live-Server
- Git-Commit enthält auskommentiertes return
- Schwer zu debuggen
✅ Nach dem Fix (mit ENV-Variable)
Lösung:
private function shouldExecuteToday(): bool
{
$executeDay = (int) Setting::getContentBySlug('day-exectute-business-structur');
$presentDay = (int) date('d');
if ($executeDay !== $presentDay) {
// Überschreibung NUR mit ENV-Variable möglich
if (env('BUSINESS_FORCE_EXECUTE', false) === true) {
$this->warn("⚠️ BUSINESS_FORCE_EXECUTE ist aktiv!");
return true;
}
return false; // ← IMMER hier, kann nicht auskommentiert werden
}
return true;
}
Vorteile:
- ✅ Kein Code muss auskommentiert werden
- ✅ Funktioniert sofort auf Test-Server (mit ENV)
- ✅ Sicher auf Live-Server (ohne ENV)
- ✅ Klare Warnungen wenn Force aktiv ist
- ✅ Besseres Logging
- ✅ Fallback wenn Setting leer ist
Zusätzliche Features
1. Automatischer Fallback
Wenn das Setting day-exectute-business-structur leer ist:
if ($executeDay === 0) {
$executeDay = 1; // Standard: Tag 1
$this->warn('Setting ist leer - verwende Standard: Tag 1');
}
Vorteil: Command funktioniert auch wenn Setting vergessen wurde zu setzen.
2. Besseres Logging
[2026-01-28 03:00:02] BusinessStoreOptimized: Configured Day: 1, Present Day: 28
[2026-01-28 03:00:02] BusinessStoreOptimized: NOT EXECUTED - wrong day (expected: 1, today: 28)
Vorteil: Klar erkennbar warum Command nicht läuft.
3. Visuelle Warnungen
Wenn BUSINESS_FORCE_EXECUTE=true:
⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
⚠️ Dies sollte NUR auf Test-Servern verwendet werden!
Vorteil: Entwickler sieht sofort, dass Force-Mode aktiv ist.
Test-Szenarien
Szenario 1: Test-Server - Entwicklung
# .env
BUSINESS_FORCE_EXECUTE=true
# Command kann jederzeit ausgeführt werden
php artisan business:store-optimized 12 2025
php artisan business:store-optimized 0 0
# ✅ Läuft ohne Probleme
Szenario 2: Live-Server - Normalbetrieb
# .env
# BUSINESS_FORCE_EXECUTE nicht gesetzt (oder =false)
# Scheduler ruft täglich auf:
# php artisan business:store-optimized 0 0
# Nur am Tag 1 wird tatsächlich ausgeführt:
# 01.02.2026 03:00 → ✅ EXECUTED
# 02.02.2026 03:00 → ❌ NOT EXECUTED
# 03.02.2026 03:00 → ❌ NOT EXECUTED
# ...
# 01.03.2026 03:00 → ✅ EXECUTED
Szenario 3: Live-Server - Manuelle Ausführung
# Admin muss manuell für alten Monat ausführen
php artisan business:store-optimized 11 2025 --clear
# Funktioniert jederzeit, da spezifische Parameter
# (nicht 0 0, daher kein Vormonat-Check)
Migration Guide
Schritt 1: Test-Server
# 1. Code aktualisieren (Git pull)
git pull origin main
# 2. ENV-Variable setzen
echo "BUSINESS_FORCE_EXECUTE=true" >> .env
# 3. Testen
php artisan business:store-optimized 0 0
# Erwartete Ausgabe:
# ⚠️ BUSINESS_FORCE_EXECUTE ist aktiv...
# ✅ Command wird ausgeführt
Schritt 2: Live-Server
# 1. Backup erstellen
php artisan backup:run
# 2. Code aktualisieren
cd /home/ploi/mivita.care
git pull origin main
# 3. ENV prüfen (NICHT setzen!)
grep BUSINESS_FORCE_EXECUTE .env
# Sollte NICHTS finden oder =false
# 4. Cache leeren
php8.4 artisan config:clear
php8.4 artisan cache:clear
# 5. Testen (falscher Tag)
php8.4 artisan business:store-optimized 0 0
# Erwartete Ausgabe:
# ❌ Command wird NICHT ausgeführt - falscher Tag
Troubleshooting
Problem: Command läuft auf Live nicht mehr
Symptom:
❌ Command wird NICHT ausgeführt - falscher Tag (erwartet: 1, heute: 28)
Lösung:
- Das ist korrekt! Command sollte nur am Tag 1 laufen
- Warte bis zum 1. des nächsten Monats
- Oder führe manuell aus:
php artisan business:store-optimized 12 2025
Problem: Setting ist leer
Symptom:
Setting "day-exectute-business-structur" ist leer oder 0. Verwende Standard: Tag 1
Lösung:
php artisan tinker --execute="
\$setting = \App\Models\Setting::where('slug', 'day-exectute-business-structur')->first();
if (!\$setting) {
\$setting = new \App\Models\Setting();
\$setting->slug = 'day-exectute-business-structur';
}
\$setting->content = '1';
\$setting->save();
echo 'Setting updated to: 1\n';
"
Problem: FORCE_EXECUTE auf Live aktiv
Symptom:
⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!
Lösung:
# .env Datei bearbeiten
nano .env
# Zeile entfernen oder auf false setzen:
BUSINESS_FORCE_EXECUTE=false
# Cache leeren
php artisan config:clear
Best Practices
✅ DO
- ENV-Variable NUR auf Test-Servern setzen
- Klare Dokumentation in .env.example
- Logs regelmäßig prüfen
- Cache nach ENV-Änderungen leeren
❌ DON'T
- NIEMALS auf Live-Server
BUSINESS_FORCE_EXECUTE=truesetzen - Kein Code-Auskommentieren mehr für Tests
- Keine manuellen Scheduler-Anpassungen für Tests
- Nicht vergessen Setting zu setzen (day-exectute-business-structur)
Zusammenfassung
| Aspekt | Alt (mit Kommentar) | Neu (mit ENV) |
|---|---|---|
| Test-Server | Code auskommentieren | ENV-Variable setzen |
| Live-Server | Kommentar vergessen | ENV nicht setzen (sicher) |
| Sicherheit | ❌ Fehleranfällig | ✅ Sicher |
| Wartbarkeit | ❌ Schwierig | ✅ Einfach |
| Logging | ⚠️ Basic | ✅ Ausführlich |
| Fallback | ❌ Kein | ✅ Automatisch |
Weitere Verbesserungen (optional)
Idee 1: Command mit --force Flag
protected $signature = 'business:store-optimized {month} {year} {--clear} {--force}';
if ($this->option('force')) {
$this->warn('--force Flag aktiv - Tag-Check wird übersprungen');
return true;
}
Idee 2: Notification bei Force-Ausführung
if (env('BUSINESS_FORCE_EXECUTE', false) === true) {
\Mail::to('admin@mivita.care')->send(
new \App\Mail\BusinessForcedExecutionMail()
);
}
Idee 3: Test-Modus in UI anzeigen
// In Layout-Header
@if(env('BUSINESS_FORCE_EXECUTE', false))
<div class="alert alert-warning">
⚠️ TEST-MODUS: Business-Commands laufen mit FORCE_EXECUTE
</div>
@endif
Support
Bei Fragen oder Problemen:
- Logs prüfen:
storage/logs/laravel.log - ENV-Variable prüfen:
php artisan config:show - Setting prüfen:
php artisan tinker→Setting::where('slug', 'day-exectute-business-structur')->first() - Dokumentation:
/dev/28-01-2026/business-store-timing-fix.md