template_runtime_error
HTTP 422 · code: "template_runtime_error" · type: https://docs.formfeed.dev/errors/template-runtime
Die Vorlage wurde kompiliert, ist aber bei der Ausführung mit den Daten dieser Anfrage fehlgeschlagen. Es wurde nichts gedruckt; das Rendering wird als fehlgeschlagen aufgezeichnet und kostet nichts.
location nennt line und column, wo die Vorlagensprache sie kennt, im Body, in der Kopf- oder Fußzeile (das Problem sagt nicht, in welchem Teil), und ist null, wo sie sie nicht kennt. Bei einer Word- oder PowerPoint-Vorlage nennt es den part der Datei.
Beispiel
{
"type": "https://docs.formfeed.dev/errors/template-runtime",
"title": "Template runtime error",
"status": 422,
"detail": "filter not found: strftime",
"code": "template_runtime_error",
"location": { "line": 12, "column": 17 },
"render_id": "rnd_7da09ab6cd9946b798c187c2a9350852",
"request_id": "req_4b7c1e9a2f3d4c5b8a6e7f9012"
}
Häufige Ursachen
- Ein unbekannter Helfer oder Filter. Liquid läuft mit strikten Filtern, ein Tippfehler stoppt das Rendering also, statt nichts auszugeben.
- Eine Berechnung ergab
NaNund erreichtemoney,numberodernumToWords: Rechnen mit einem Wert, der Text ist ("19 %") oder fehlt. Die Helfer stoppen das Rendering, stattNaNzu drucken; Text, der keine Zahl ist, etwa"auf Anfrage", geben sie unverändert aus. - Eine Methode wird auf einem fehlenden Wert aufgerufen, zum Beispiel
customer.name.upper(), wenncustomernicht in den Daten steht. - Ein Include eines Partials, das nie mit der Vorlage gepusht wurde, etwa eines, das nach dem letzten
formfeed templates pushinpartials/hinzukam (siehe Partials), oder eines geteilten Partials, das gelöscht, umbenannt oder für eine andere Vorlagensprache geschrieben wurde. - Ein Partial, das sich selbst einbindet (in Handlebars: Maximum call stack size exceeded).
- Eine Liquid-Vorlage, die länger läuft als die 5 Sekunden, die eine Vorlage dauern darf. Jinja2 und Handlebars melden das als
render_timeout.
Selten meldet der Render-Dienst unter diesem Code einen eigenen Fehler, etwa einen abgestürzten Browser. Dann bezieht sich detail gar nicht auf Ihre Vorlage. Wiederholen Sie einmal, und wenn es wieder auftritt, senden Sie die request_id an support@formfeed.dev.
So beheben Sie es
- Stellen Sie den Fehler mit denselben Daten nach: Fügen Sie die
datader Anfrage im Editor als Datensatz ein, oder speichern Sie sie alsdata/failing.jsonim Vorlagenordner und führen Sieformfeed validate <slug> --data failingaus. Bewahrt der Workspace Render-Anfragen auf, holtformfeed renders pull <id>die Daten des fehlgeschlagenen Renderings; siehe Ein fehlgeschlagenes Rendering nachstellen. - Sichern Sie optionale Werte mit
defaultoder einemifab. - Prüfen Sie den Namen in der Helfer-Referenz.
Wiederholen?
Nein, es sei denn, detail handelt nicht von Ihrer Vorlage. Korrigieren Sie zuerst Vorlage oder Daten, und senden Sie die Anfrage dann mit einem neuen Idempotency-Key oder ohne: Eine 4xx-Antwort wird 24 Stunden unter ihrem Schlüssel gespeichert, der alte Schlüssel liefert also wieder dieses Problem. Siehe Wiederholen.