feat: Sagen, wenn Oberflaeche und Server auseinanderlaufen
Ein "npm run build" allein startet den Dienst nicht neu. Die Oberflaeche ruft dann Endpunkte auf, die es serverseitig noch gar nicht gibt - und das sieht aus wie ein Fehler in der Funktion, nicht wie ein halbes Update. Genau daran ging gerade eine Stunde Fehlersuche drauf: Die Aufstellung eines Ausgaben-Anteils blieb leer, weil der Server den Endpunkt nicht kannte. Vite setzt den Commit beim Bauen ins Bundle, die Oberflaeche vergleicht ihn beim Start mit dem, den der Server unter /api/version meldet. Weichen sie ab, steht der Hinweis samt Kommando ueber jeder Seite. Kennt eine der beiden Seiten ihren Stand nicht, schweigt der Hinweis - falscher Alarm waere schlimmer als keiner. Beide Richtungen im Browser geprueft: bei verschiedenen Staenden erscheint er, bei gleichen nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { api } from "../api";
|
||||
import Icon from "./Icon";
|
||||
|
||||
// Wird von Vite beim Bauen eingesetzt (siehe vite.config.js).
|
||||
const GEBAUT = typeof __APP_SHA__ === "string" ? __APP_SHA__ : "";
|
||||
|
||||
/**
|
||||
* Weist darauf hin, wenn Oberfläche und Server aus verschiedenen Ständen
|
||||
* stammen.
|
||||
*
|
||||
* Das passiert genau dann, wenn `npm run build` lief, der Dienst aber nicht neu
|
||||
* gestartet wurde: Die Oberfläche ruft dann Endpunkte auf, die es serverseitig
|
||||
* noch gar nicht gibt, und alles sieht nach einem Fehler in der Funktion aus
|
||||
* statt nach einem halben Update.
|
||||
*
|
||||
* Verglichen wird nur, wenn BEIDE Seiten ihren Stand kennen – sonst schwiege
|
||||
* der Hinweis besser, als falschen Alarm zu schlagen.
|
||||
*/
|
||||
export default function StandHinweis() {
|
||||
const [server, setServer] = useState(null);
|
||||
useEffect(() => {
|
||||
let ok = true;
|
||||
api.version().then((v) => ok && setServer(v?.git_sha || "")).catch(() => {});
|
||||
return () => { ok = false; };
|
||||
}, []);
|
||||
|
||||
if (!GEBAUT || !server || server === GEBAUT) return null;
|
||||
return (
|
||||
<div className="stand-hinweis">
|
||||
<Icon name="alert" size={16} />
|
||||
<span>
|
||||
Oberfläche ({GEBAUT}) und Server ({server}) laufen auf verschiedenen
|
||||
Ständen. Bitte <code>sudo ./deploy/update.sh</code> ausführen – sonst
|
||||
fehlen dem Server Funktionen, die die Oberfläche schon aufruft.
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user