Zum Hauptinhalt springen

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 NaN und erreichte money, number oder numToWords: Rechnen mit einem Wert, der Text ist ("19 %") oder fehlt. Die Helfer stoppen das Rendering, statt NaN zu 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(), wenn customer nicht in den Daten steht.
  • Ein Include eines Partials, das nie mit der Vorlage gepusht wurde, etwa eines, das nach dem letzten formfeed templates push in partials/ 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 data der Anfrage im Editor als Datensatz ein, oder speichern Sie sie als data/failing.json im Vorlagenordner und führen Sie formfeed validate <slug> --data failing aus. Bewahrt der Workspace Render-Anfragen auf, holt formfeed renders pull <id> die Daten des fehlgeschlagenen Renderings; siehe Ein fehlgeschlagenes Rendering nachstellen.
  • Sichern Sie optionale Werte mit default oder einem if ab.
  • 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.