Ein Site-Paket ist eine portable Kopie des Inhaltsmodells, der Inhalte, des redaktionellen Verlaufs, der Website-Darstellung, der Einstellungen und der Mediendateien einer EmDash-Website. Importieren Sie ein Site-Paket, um eine Website in ein anderes EmDash-Deployment zu verschieben – auch in eines, das eine andere Datenbank verwendet: SQLite, PostgreSQL oder Cloudflare D1.
Ein Import schreibt in eine neue Website, deren Inhaltsbereich leer ist. EmDash prüft das gesamte Paket, bevor irgendetwas geschrieben wird, führt den Import in kleinen, fortsetzbaren Schritten aus, liest die importierte Website zurück und stellt eine Quittung aus, wenn das Ergebnis mit dem Paket übereinstimmt.
Ein Site-Paket enthält keine Benutzer, Zugangsdaten oder Secrets. Es enthält jedoch jeden Eintrag und jeden Kommentar der Website, einschließlich der E-Mail-Adressen von Autoren und Kommentierenden. Bewahren Sie es mit derselben Sorgfalt auf und versenden Sie es so wie ein Datenbank-Backup.
Die richtige Art der Kopie wählen
| Mechanismus | Zweck | Importierbar | Mediendateien | Benutzer und Secrets |
|---|---|---|---|---|
| Seed-Datei | Ein Inhaltsmodell und Beispielinhalte initialisieren | Ja, mit Seed-Semantik | Nein | Nein |
| Vorschau-Snapshot | Isoliertes Vorschau-Rendering befüllen | Nur Vorschau | Nein | Nein |
| JSON-Backup | Ausgewählten Zustand in Datenbankform prüfen | Nein | Nein | Nein |
| Rohes Datenbank- und Medien-Backup | Ein Deployment wiederherstellen | Wiederherstellung in denselben Datenbanktyp | Separate Kopie | Ja |
| Site-Paket | Eine Website in eine andere EmDash-Website verschieben | Ja, in eine leere Website | Ja | Nein. Nur Namen und E-Mail-Adressen der Autoren |
Verwenden Sie ein rohes Datenbank-Backup, um ein Deployment nach einem Datenverlust wiederherzustellen. Verwenden Sie ein Site-Paket, um an anderer Stelle eine neue Kopie einer Website zu erstellen.
Was ein Site-Paket enthält
Ein Site-Paket enthält:
- Collections, Felder, Blocktypen mit jeder Version, Taxonomie-Definitionen, Relationsdefinitionen und Byline-Felddefinitionen;
- jeden Inhaltseintrag in jeder Sprache, einschließlich Entwürfen, geplanten Einträgen, Einträgen im Papierkorb, Revisionsverlauf und Übersetzungsgruppen;
- Taxonomie-Begriffe und Begriffszuweisungen, Bylines und Credits, Inhaltsreferenzen und SEO-Datensätze;
- Menüs und Menüeinträge, Widget-Bereiche und Widgets, Sections und Weiterleitungen;
- Kommentare und Kommentarreaktionen, sofern der Export Kommentare nicht ausschließt;
- Medienordner, Medien-Metadaten und die Bytes jeder fertigen Mediendatei; und
- die unten aufgeführten portablen Website-Einstellungen.
Das Paket speichert JSON-Werte, etwa JSON-Felder und Portable Text, mit sortierten Objektschlüsseln. Ein importierter Wert kann seine Schlüssel daher in einer anderen Reihenfolge auflisten als der Ursprung. Ansonsten bleiben die Werte unverändert.
Portable Einstellungen
Nur diese Einstellungen werden exportiert: site:title, site:tagline, site:logo, site:favicon, site:postsPerPage, site:dateFormat, site:timezone, site:social, site:seo, emdash:site_title, emdash:site_tagline und emdash:locale.
Die Ziel-Website behält ihre eigene Website-URL (site:url und emdash:site_url), Website-ID, ihren Einrichtungsstatus und ihre Backup-Einstellungen. Ein Import überschreibt diese niemals.
Der Importplan fragt, ob Titel und Tagline des Ziels beibehalten werden sollen, die der Einrichtungsassistent geschrieben hat, oder ob die Werte des Pakets verwendet werden sollen. Standardmäßig werden die Werte des Pakets verwendet.
Principals
Ein Benutzerkonto wird nie mit einem Paket übertragen. Für jeden Benutzer des Ursprungs, auf den Inhalte, Revisionen, Medien, Bylines oder Kommentare verweisen, enthält das Paket einen Principal: die ID des Benutzers, den Anzeigenamen und die E-Mail-Adresse. Ein Principal hat keine Rolle, kein Passwort, keinen Passkey, keine Sitzung und kein Token.
Während des Imports ordnen Sie jeden Principal einem Benutzer auf der Ziel-Website zu oder lassen ihn unzugeordnet. Siehe Autoren zu Zielbenutzern zuordnen.
Kommentare
Kommentare umfassen Namen und E-Mail-Adresse des Autors, Text, Status, Threading, Zeitstempel und Moderationsmetadaten. Der IP-Adress-Hash und der User-Agent werden nicht exportiert.
Reaktionen behalten ihre Anzahl. Der Exporter ersetzt jeden Abstimmenden-Hash durch einen neuen Zufallswert, sodass das Ziel eine Reaktion nicht dem Besucher zuordnen kann, der sie abgegeben hat.
Was ein Site-Paket auslässt
Ein Site-Paket enthält niemals:
- Benutzer, Sitzungen, Passkeys, OAuth-Konten, erlaubte Domains, API-Tokens, OAuth-Clients, Autorisierungscodes oder Gerätecodes;
- Plugin-Speicher, Plugin-Status oder Plugin-Einstellungen, einschließlich Plugin-Secrets;
- andere Einstellungen als die portablen Einstellungen, etwa das Signatur-Secret für Vorschauen;
- Audit-Logs, Ratenbegrenzungen, Bearbeitungssperren, den Status geplanter Aufgaben, das 404-Log oder den Migrationsverlauf;
- Mediennutzungsdatensätze und Suchindizes, die der Import neu aufbaut;
- Speicherschlüssel, Bucket-Namen, Datenbanknamen oder Binding-Namen des Ursprungs; oder
- Medien, die nicht fertig sind, etwa einen unvollständigen Upload.
Medien eines externen Medienanbieters bleiben extern. Das Paket behält die Referenz, aber die Dateien des Anbieters werden nicht kopiert.
Ziel-Website vorbereiten
Importieren Sie in eine Website, die alle folgenden Anforderungen erfüllt. Wenn Inhalte, Sprachen, Upload-Limit oder unterstütztes Format des Ziels nicht zum Paket passen, meldet die Analyse einen Blocker.
- Ein Administratorkonto. Der Import läuft als angemeldeter Administrator oder mit einem API-Token. Legen Sie den Administrator des Ziels während der Einrichtung an.
- Ein Speicher-Backend. Sowohl der Ursprung als auch das Ziel benötigen konfigurierten Speicher. EmDash legt die Paketdateien dort zwischen.
- Keine Inhalte. Das Ziel darf keine Einträge (einschließlich Einträgen im Papierkorb), Revisionen, Medien oder Medienordner, Bylines oder Byline-Felder, Kommentare, Weiterleitungen, Begriffszuweisungen, Relationen, SEO-Datensätze, im Admin erstellte Sections oder nach der Einrichtung erstellte Collections oder Blocktypen enthalten. Eine Website, die aus einem beliebigen offiziellen Template eingerichtet wurde, erfüllt diese Voraussetzung. Was die Einrichtung erstellt hat, ist das Einrichtungsgerüst: die per Seed angelegten Collections und Blocktypen, Taxonomie-Definitionen und ihre nicht zugewiesenen Begriffe, Menüs und ihre Einträge, Widget-Bereiche und ihre Widgets sowie Theme-Sections. Der Plan listet das Gerüst auf, und der Import entfernt es, nachdem Sie den Plan bestätigt haben.
- Jede Sprache, die das Paket verwendet. Fügen Sie jede Sprache des Pakets zur i18n-Konfiguration des Ziels hinzu. Eine Website ohne i18n-Konfiguration akzeptiert nur
en. Sprachen werden ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen, und der Import schreibt jede Sprache in der beim Ziel konfigurierten Schreibweise, deklariert alslocale_recased. - Ein ausreichend großes Upload-Limit. Jede Mediendatei muss in die
maxUploadSizedes Ziels passen, die standardmäßig 50 MiB beträgt. - Formatversion
1. Das Ziel muss die Formatversion des Pakets und jede erforderliche Funktion unterstützen.
Die folgende Anfrage gibt die unterstützten Formatversionen, Funktionen und Limits zurück. Ihr portableDomain-Objekt meldet, ob die Website einen Import empfangen kann, und falls nicht, warum.
curl https://new.example.com/_emdash/api/admin/transfer/capabilities \
-H "Authorization: Bearer $EMDASH_TOKEN"
Eine Website exportieren
Ein Export liest die Website in begrenzten Schritten und schreibt das Paket in den Speicher der Website. Bevor ein Export abgeschlossen wird, validiert der Exporter das fertige Paket auf dieselbe Weise wie ein Import. Wenn während eines Exports ein Schreibvorgang auf der Website erfolgreich ist, beginnt der Exporter von vorn. Das Setzen oder Erneuern einer Bearbeitungssperre für einen Eintrag zählt nicht als Schreibvorgang. Nach drei Versuchen schlägt er mit TRANSFER_EXPORT_CONCURRENT_WRITES fehl.
Die Dateien des Exports bleiben sieben Tage nach seiner Erstellung verfügbar. Danach gibt ein Download TRANSFER_EXPIRED zurück.
Im Admin exportieren
-
Öffnen Sie Settings → Transfer. Die Seite ist für Administratoren verfügbar.
-
Deaktivieren Sie im Bereich Export die Option Include comments, um Kommentare und Reaktionen auszulassen.
-
Wählen Sie Export site. Die Seite zeigt den Fortschritt des Exports. Lassen Sie die Seite geöffnet; wenn Sie sie verlassen, wird der Export fortgesetzt, sobald Sie zurückkehren.
-
Wenn Export ready erscheint, wählen Sie Download package und legen fest, wo die
.emdash-Datei gespeichert werden soll. Die Seite zeigt, wie viele Dateien und Bytes heruntergeladen wurden, und Stop bricht den Download ab.
Der Bereich zeigt außerdem den Paket-Digest, die Anzahl der Datensätze jeder Art und die letzten Exporte der Website, jeweils mit eigener Download-Schaltfläche bis zu ihrem Ablauf.
Download package ruft den Export Datei für Datei ab, prüft Größe und SHA-256-Digest jeder Datei anhand des Manifests und erstellt die .emdash-Datei im Browser, sodass dies auf Cloudflare Workers für Websites jeder Größe funktioniert. Wenn eine Datei nicht übereinstimmt, stoppt der Download mit einem Fehler. Chrome, Edge und andere Chromium-basierte Browser schreiben die Datei direkt auf die Festplatte. Andere Browser halten das gesamte Paket im Speicher, bis der Download abgeschlossen ist; bei einem Export von mehr als etwa 500 MB empfiehlt die Seite einen Chromium-basierten Browser oder die CLI.
Download as one file fordert das Archiv stattdessen in einer einzigen Antwort vom Server an. Das eignet sich für kleine Websites. Auf Cloudflare Workers kann eine große Website die Limits einer einzelnen Anfrage überschreiten.
Mit der CLI exportieren
Melden Sie sich bei der Ursprungs-Website an und exportieren Sie sie dann in eine Paketdatei:
npx emdash login --url https://example.com
npx emdash site export --url https://example.com --output site.emdash
Der Befehl führt den Export bis zum Abschluss aus, lädt das Paket Datei für Datei herunter, prüft Größe und Digest jeder Datei und schreibt site.emdash. Fügen Sie --no-comments hinzu, um Kommentare und Reaktionen auszulassen. Wenn der Befehl unterbrochen wird, führen Sie ihn mit denselben Optionen erneut aus, um denselben Export fortzusetzen. Siehe die Referenz zu emdash site export.
Mit der REST-API exportieren
Jeder Aufruf von advance führt einen Schritt aus und gibt nextRequestInMs zurück, die Wartezeit vor dem nächsten Aufruf. Der Export ist abgeschlossen, wenn nextRequestInMs den Wert null hat.
Diese Beispiele verwenden ein persönliches Zugriffstoken mit dem Scope transfer:export. Siehe Token-Scopes.
-
Starten Sie den Export. Um Kommentare und Reaktionen auszulassen, senden Sie
{ "comments": false }als Body. EinIdempotency-Key-Header sorgt dafür, dass eine wiederholte Anfrage denselben Export zurückgibt, statt einen weiteren zu starten. Die Wiederverwendung eines Schlüssels mit anderen Optionen schlägt mit409 TRANSFER_IDEMPOTENCY_CONFLICTfehl.curl -X POST https://example.com/_emdash/api/admin/transfer/exports \ -H "Authorization: Bearer $EMDASH_TOKEN" \ -H "Idempotency-Key: move-to-new-host" -
Treiben Sie den Export voran, bis
nextRequestInMsden Wertnullhat. Warten Sie zwischen den Aufrufen die zurückgegebene Anzahl von Millisekunden.operation.progressmeldet die Schrittedoneundtotal, die bisher geschriebenenrecordssowiebytesDoneundbytesTotal, sobald die Paketgröße bekannt ist.curl -X POST https://example.com/_emdash/api/admin/transfer/exports/$EXPORT_ID/advance \ -H "Authorization: Bearer $EMDASH_TOKEN" -
Prüfen Sie, dass
operation.stateden Wertcompletehat. Einfailed-Export enthält den Grund inoperation.errorCode. -
Laden Sie das Paket als eine
.emdash-Datei herunter:curl -o site.emdash \ https://example.com/_emdash/api/admin/transfer/exports/$EXPORT_ID/archive \ -H "Authorization: Bearer $EMDASH_TOKEN"
Eine .emdash-Datei ist ein unkomprimiertes Tar-Archiv mit manifest.json als erstem Eintrag. Das Archiv streamt alle Dateien in einer Antwort. Auf Cloudflare Workers kann eine große Website die Limits einer einzelnen Anfrage überschreiten. Laden Sie in diesem Fall manifest.json von exports/{id}/manifest und jede Datei von exports/{id}/files/{path} herunter. Jede heruntergeladene Datei wird während des Streamings gegen ihren aufgezeichneten Digest geprüft. Wenn sich die gespeicherten Bytes nach dem Export geändert haben, endet der Download mit einem Fehler, statt abgeschlossen zu werden.
Eine Website importieren
Ein Import wird aus einem Paket erstellt, zu einem Plan analysiert und erst ausgeführt, nachdem Sie diesen Plan anhand seines Digests bestätigt haben. Ein Import, dessen Ausführung noch nicht begonnen hat, läuft 24 Stunden nach seiner Erstellung ab.
Admin, CLI und REST-API können jeden Schritt ausführen. Ein KI-Agent kann über die MCP-Tools einen bereits hochgeladenen Import analysieren und starten.
Im Admin importieren
-
Öffnen Sie auf der Ziel-Website Settings → Transfer. Der Bereich Import erscheint, wenn die Website einen Import empfangen kann. Andernfalls listet er auf, was die Website bereits enthält und einen Import verhindert.
-
Wählen Sie Choose package file und dann die
.emdash-Datei. Der Browser prüft das Paket und lädt es in Teilen hoch. Während des Uploads ändert sich nichts auf der Website. Wenn der Upload stoppt, wählen Sie dieselbe Datei erneut, um dort fortzufahren, wo er aufgehört hat. -
Wenn der Upload abgeschlossen ist, analysiert die Website das Paket. Sie können die Seite verlassen und später zurückkehren.
-
Überprüfen Sie den Import: die Quell-Website, Exportdatum und EmDash-Version, Größe, Paket-Digest und die Anzahl der Datensätze jeder Art. Lesen Sie die Blockers und Warnings, die Differences from the source site, die die Transformationen des Plans auflisten, und den Starter content that will be removed, gruppiert nach Typ. Siehe Importplan überprüfen.
-
Wählen Sie unter Authors den Benutzer dieser Website, dem die Inhalte jedes Autors gehören sollen, oder Don’t map. Autoren, die mit der E-Mail-Adresse eines Benutzers übereinstimmen, sind als Matched by email markiert. Siehe Autoren zu Zielbenutzern zuordnen.
-
Wählen Sie unter Site identity, ob Website-Titel und Tagline des Pakets verwendet oder die dieser Website beibehalten werden sollen.
-
Wählen Sie Start import und bestätigen Sie. Die Schaltfläche ist deaktiviert, solange der Plan Blocker enthält. Das Bearbeiten auf der Website ist pausiert, bis der Import abgeschlossen ist.
-
Verfolgen Sie den Fortschritt. Wenn der Import abgeschlossen ist, zeigt die Seite die Quittung mit einem Verified-Abzeichen sowie ihre Quittungs-, Paket-, Plan- und Inhalts-Digests. Wählen Sie Copy receipt, um eine Kopie des Quittungs-JSON zu behalten.
Die Seite bietet außerdem Cancel import vom Upload bis zum Abschluss des Imports sowie Abandon import, nachdem ein Import, der bereits mit dem Schreiben begonnen hat, fehlgeschlagen ist oder abgebrochen wurde. Beide fragen nach einer Bestätigung. Siehe Einen Import abbrechen und Einen unvollständigen Import aufgeben.
Mit der CLI importieren
Melden Sie sich bei der Ziel-Website an und analysieren Sie dann das Paket:
npx emdash login --url https://new.example.com
npx emdash site import site.emdash --url https://new.example.com --analyze
Der Befehl prüft die gesamte Paketdatei lokal, lädt sie hoch, analysiert sie und gibt den Plan mit seinem Plan-Digest aus. Er endet mit dem Code 2, wenn der Plan Blocker enthält. Überprüfen Sie den Plan wie unter Importplan überprüfen beschrieben.
Um die Entscheidungen des Plans zu ändern, führen Sie --analyze erneut mit Entscheidungs-Flags aus. --map-principal ordnet einen Principal, per ID oder E-Mail-Adresse, einem Zielbenutzer per ID oder E-Mail-Adresse oder none zu. --use-target-title und --use-target-tagline behalten Titel und Tagline des Ziels bei:
npx emdash site import site.emdash --url https://new.example.com --analyze \
--map-principal editor@example.com=editor@example.com \
--map-principal 01J8ZQ4Y6T2N0D3VJ5R7K9M1PX=none \
--use-target-title
Führen Sie den überprüften Plan aus, indem Sie seinen Digest übergeben:
npx emdash site import site.emdash --url https://new.example.com \
--plan sha256:3f1c… --confirm
Der Befehl führt den Import bis zum Abschluss aus und gibt die Quittung aus. Wenn er unterbrochen wird, setzen Sie ihn mit emdash site import resume <operation-id> fort. emdash site import status <operation-id> gibt den Status des Imports aus, und emdash site import receipt <operation-id> gibt die Quittung erneut aus. Siehe die Referenz zu emdash site import.
Mit der REST-API importieren
Der Server arbeitet mit den Dateien innerhalb eines Pakets, nicht mit dem .emdash-Archiv. Entpacken Sie das Archiv zuerst. Es enthält manifest.json, Indexdateien unter index/, Datensatzdateien unter records/ und Mediendateien unter media/. Das Manifest legt Größe und SHA-256-Digest jeder Datei fest, sodass der Paket-Digest das gesamte Paket identifiziert.
Diese Beispiele verwenden ein Token mit den Scopes transfer:analyze und transfer:execute.
-
Erstellen Sie den Import. Senden Sie die unveränderten Bytes von
manifest.jsonals Anfrage-Body. Die Antwort enthält die Operation und die erste Seite der Dateien, die der Server noch benötigt.curl -X POST https://new.example.com/_emdash/api/admin/transfer/imports \ -H "Authorization: Bearer $EMDASH_TOKEN" \ -H "Idempotency-Key: move-to-new-host" \ --data-binary @site/manifest.json -
Laden Sie jede fehlende Datei nach
imports/{id}/files/{path}hoch. DerContent-Length-Header muss der deklarierten Größe der Datei entsprechen, und die Bytes müssen mit ihrem deklarierten Digest übereinstimmen.curl -X PUT \ https://new.example.com/_emdash/api/admin/transfer/imports/$IMPORT_ID/files/index/000000.ndjson \ -H "Authorization: Bearer $EMDASH_TOKEN" \ --data-binary @site/index/000000.ndjsonDas Hochladen einer Indexdatei deklariert die Datensatz- und Mediendateien, die sie auflistet. Fordern Sie nach jedem Upload-Stapel erneut
imports/{id}/missingan und fahren Sie fort, bis keine Elemente mehr zurückgegeben werden.Das Hochladen einer bereits gespeicherten Datei prüft sie erneut. Wenn die gespeicherte Kopie nicht mehr übereinstimmt, ersetzt der Upload sie, und die Antwort meldet
alreadyVerified: false. -
Analysieren Sie das Paket. Rufen Sie
imports/{id}/analyzeauf, bisnextRequestInMsden Wertnullhat. Die letzte Antwort enthält denplanund seinenplanDigest.curl -X POST https://new.example.com/_emdash/api/admin/transfer/imports/$IMPORT_ID/analyze \ -H "Authorization: Bearer $EMDASH_TOKEN" -
Überprüfen Sie den Plan und lesen Sie jeden Blocker, jede Warnung und jede Transformation. Siehe Importplan überprüfen.
-
Übermitteln Sie Entscheidungen, wenn die Standardwerte nicht Ihren Wünschen entsprechen. Jede Übermittlung gibt einen neuen Plan und Plan-Digest zurück. Sobald die Ausführung angefordert wurde, ist der Plan eingefroren, und das Übermitteln von Entscheidungen schlägt mit
409 TRANSFER_INVALID_STATEfehl.curl -X POST https://new.example.com/_emdash/api/admin/transfer/imports/$IMPORT_ID/analyze \ -H "Authorization: Bearer $EMDASH_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "decisions": { "principalMappings": { "01J8ZQ4Y6T2N0D3VJ5R7K9M1PX": null }, "siteTitle": "target" } }' -
Starten Sie den Import mit den überprüften Digests:
curl -X POST https://new.example.com/_emdash/api/admin/transfer/imports/$IMPORT_ID/execute \ -H "Authorization: Bearer $EMDASH_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "packageDigest": "sha256:…", "planDigest": "sha256:…" }' -
Treiben Sie den Import voran, bis
nextRequestInMsden Wertnullhat, und warten Sie zwischen den Aufrufen die zurückgegebene Verzögerung ab.curl -X POST https://new.example.com/_emdash/api/admin/transfer/imports/$IMPORT_ID/advance \ -H "Authorization: Bearer $EMDASH_TOKEN" -
Prüfen Sie, dass
operation.stateden Wertcompletehat, und lesen Sie dann die Quittung vonimports/{id}/receipt.
Die Ausführung schlägt mit TRANSFER_PACKAGE_DIGEST_MISMATCH oder TRANSFER_PLAN_DIGEST_MISMATCH fehl, wenn einer der Digests vom zwischengespeicherten Paket oder vom aktuellen Plan abweicht. Lesen Sie den aktuellen Plan von imports/{id}/plan, überprüfen Sie ihn erneut und versuchen Sie es mit seinen Digests noch einmal.
Autoren zu Zielbenutzern zuordnen
Die Analyse listet jeden Principal mit seinem Anzeigenamen, seiner E-Mail-Adresse und der Anzahl der Paketdatensätze auf, die auf ihn verweisen. Wenn genau ein Zielbenutzer dieselbe E-Mail-Adresse hat – verglichen ohne Berücksichtigung der Groß-/Kleinschreibung –, schlägt der Plan diesen Benutzer vor und ordnet den Principal standardmäßig ihm zu. Principals ohne Vorschlag beginnen unzugeordnet.
Um eine Zuordnung zu ändern, übergeben Sie --map-principal an emdash site import --analyze oder übermitteln Sie principalMappings an den Analyse-Endpunkt. Jede Zuordnung benennt einen Zielbenutzer oder lässt den Principal unzugeordnet (none in der CLI, null in der API). EmDash wendet jede Zuordnung auf Eintragsautoren, Revisionsautoren, Medien-Uploader, Byline-Benutzerverknüpfungen und Kommentarautoren an.
Die Referenzen eines unzugeordneten Principals werden entfernt. Wenn ein unzugeordneter Autor außerdem eine mit seinem Konto verknüpfte Byline hatte, schreibt der Importer diese Byline explizit jedem Eintrag des Autors gut, der keinen expliziten Byline-Credit hat und dessen Sprache die Byline des Autors besitzt. Der Credit des Autors bleibt daher auf der Seite erhalten.
Zwei Zuordnungen erzeugen einen principal_conflict-Blocker:
- ein Principal mit mehr als einer Byline in derselben Sprache wird einem Benutzer zugeordnet; oder
- zwei Principals, die beide Bylines in derselben Sprache haben, werden demselben Benutzer zugeordnet.
Ein Zielbenutzer kann nur eine Byline pro Sprache haben. Lassen Sie einen Principal unzugeordnet oder ordnen Sie die Principals verschiedenen Benutzern zu.
Importplan überprüfen
Ein Plan listet auf, was der Import erstellen wird, welche Entscheidungen er anwenden wird, sowie drei Arten von Befunden:
- Blocker verhindern die Ausführung. Die Ausführung gibt
TRANSFER_PLAN_BLOCKEDzurück, bis der Plan keine mehr enthält. Ändern Sie die Principal-Zuordnungen, um einenprincipal_conflictaufzulösen. Jeder andere Blocker erfordert eine Änderung am Paket oder am Ziel: Brechen Sie den Import ab, nehmen Sie die Änderung vor und erstellen Sie einen neuen Import. - Warnungen beschreiben Probleme im Paket, die den Import nicht stoppen. Sie werden in die Quittung übernommen.
- Transformationen sind die exakten, deklarierten Unterschiede zwischen der Quell-Website und der importierten Website. Die Änderungen des Exporters werden zuerst aufgeführt, dann die des Imports. Die Verifizierung wendet die Transformationen des Imports an, wenn sie die importierte Website mit dem Paket vergleicht.
Ein Plan listet höchstens 500 Blocker und Warnungen auf. Eine Warnung issues_truncated meldet, wie viele weitere gefunden wurden.
Blocker
| Code | Bedeutung |
|---|---|
package_invalid | Eine Paketdatei oder ein Pfad besteht die Validierung nicht. |
unsupported_format | Das Ziel unterstützt das Format oder die Formatversion des Pakets nicht. |
unsupported_feature | Das Paket erfordert eine Funktion, die das Ziel nicht unterstützt. |
limit_exceeded | Eine Paketdatei oder ein Datensatz überschreitet ein Limit. |
file_missing | Eine deklarierte Paketdatei wurde nicht hochgeladen. |
file_mismatch | Größe oder Digest einer Paketdatei stimmt nicht mit ihrer Deklaration überein. |
record_invalid | Ein Datensatz ist fehlerhaft oder kein kanonisches JSON. |
record_count_mismatch | Die Anzahl der Datensätze einer Art weicht vom Manifest ab. |
record_order_invalid | Datensätze sind nicht in der richtigen Reihenfolge, oder ein übergeordneter Datensatz erscheint nach seinem untergeordneten. |
duplicate_id | Zwei Datensätze derselben Art haben dieselbe ID. |
dangling_reference | Ein Datensatz verweist auf einen Datensatz, der nicht im Paket enthalten ist. Dazu gehört ein Blocks-Feld, das einen Blocktyp nennt, der im Paket fehlt, sowie ein Blocktyp, dessen aktuelle Version im Paket fehlt. |
reference_cycle | Ein Begriff, Kommentar oder Menüeintrag ist sein eigenes übergeordnetes Element. |
media_ref_invalid | Inhalte verweisen auf einen Mediendatensatz, der nicht im Paket enthalten ist. |
media_blob_missing | Die Datei eines Mediendatensatzes ist nicht im Paket enthalten. |
media_blob_too_large | Eine Mediendatei ist größer als die maxUploadSize des Ziels. |
target_not_empty | Das Ziel enthält bereits Inhalte. Das detail des Blockers nennt, was gefunden wurde. |
locale_not_configured | Das Paket verwendet eine Sprache, die die i18n-Konfiguration des Ziels nicht enthält. |
field_type_unknown | Ein Feld oder Byline-Feld verwendet einen Typ, den das Ziel nicht unterstützt. |
principal_conflict | Principal-Zuordnungen würden einem Benutzer zwei Bylines in derselben Sprache geben. |
integer_out_of_range | Eine Ganzzahl liegt außerhalb des Ganzzahlbereichs der Zieldatenbank. PostgreSQL speichert Ganzzahlen mit 32 Bit. |
value_constraint_violation | Ein Wert, den die Admin-API ablehnen würde. Siehe die Liste unten. |
unique_violation | Ein Datensatz würde den eindeutigen Schlüssel eines anderen Datensatzes auf dem Ziel duplizieren. |
Der Importer schreibt Datensätze direkt, daher wendet die Analyse dieselben Prüfungen an, die die Admin-API beim Speichern dieser Datensätze anwendet. Jeder dieser Werte ist eine value_constraint_violation:
- ein Eintragswert, der nicht in die Spalte seines Feldes passt, ein Pflichtfeld ohne Wert oder ein Wert für ein Feld, das die Collection nicht hat;
- eine Weiterleitung, deren Quelle oder Ziel kein Pfad auf der Website ist, deren Typ nicht unterstützt wird, deren Quellmuster ungültig ist oder deren Ziel einen Parameter verwendet, den die Quelle nicht erfasst;
- eine Byline-Website, die keine
http- oderhttps-URL ist, ein Byline-Feldwert, der nicht zum Typ oder zu den Auswahlmöglichkeiten seines Feldes passt, oder ein Byline-Feld mit mehr Auswahlmöglichkeiten, als eine Website unterstützt; - ein ungültiges URL-Muster einer Collection;
- ein Blocktyp mit einem reservierten Slug, einem leeren oder mehr als 200 Zeichen langen Label oder Felddefinitionen, die der Blocktyp-Editor ablehnen würde;
- eine kanonische SEO-URL, die weder eine
http- oderhttps-URL noch ein Website-Pfad ist; und - eine Menüeintrags-URL mit einem Schema, das Menüs nicht erlauben.
Warnungen
| Code | Bedeutung |
|---|---|
media_provider_external | Inhalte verwenden Medien eines externen Anbieters. Die Referenz bleibt erhalten; die Dateien werden nicht kopiert. |
media_row_missing | Eine Einstellung verweist auf Medien, die nicht im Paket enthalten sind. |
soft_reference_dangling | Eine optionale Referenz löst sich nicht zu einem Datensatz im Paket auf. |
redirect_loops_unchecked | Das Paket enthält zu viele Weiterleitungen, um vor dem Import auf Schleifen zu prüfen. Eine Weiterleitung, die eine Schleife schließen würde, wird deaktiviert importiert. |
issues_truncated | Es wurden mehr Blocker oder Warnungen gefunden, als der Plan auflistet. |
Transformationen
Der Exporter deklariert die Änderungen, die er an den Daten der Quell-Website vorgenommen hat. Jede dieser Transformationen enthält eine Datensatzart und eine Anzahl:
| Code | Bedeutung |
|---|---|
orphan_dropped | Datensätze, deren übergeordneter Datensatz auf der Quell-Website nicht mehr existierte, wurden ausgelassen, etwa eine Revision eines gelöschten Eintrags. |
soft_orphan_dropped | Verknüpfungen zu fehlenden Datensätzen wurden ausgelassen, etwa eine Begriffszuweisung zu einem gelöschten Begriff oder ein Menüeintrag, der auf einen gelöschten Eintrag zeigt. |
orphan_reference_nulled | Eine Referenz auf einen fehlenden Datensatz wurde entfernt, etwa der gelöschte Ordner einer Mediendatei. |
avatar_nulled | Ein Byline-Avatar oder ein Section-Vorschaubild verwies auf Medien, die nicht im Paket enthalten sind, und wurde entfernt. |
media_not_ready_dropped | Medien, die nicht fertig waren, etwa ein unvollständiger Upload, wurden ausgelassen. |
media_ref_unlinked | Referenzen auf Medien, die nicht im Paket enthalten sind, wurden aus Inhalten entfernt. |
media_url_relativized | Absolute URLs zu den eigenen Mediendateien der Quell-Website wurden in websiterelative URLs umgewandelt, die auf dem Ziel aufgelöst werden. |
redirect_duplicate_dropped | Doppelte Weiterleitungen für denselben Quellpfad wurden ausgelassen. Pro Quellpfad wurde eine Weiterleitung beibehalten. |
unknown_storage_key | Datensätze verweisen noch auf Mediendateien, die die Quell-Website nicht hat. Sie wurden unverändert exportiert. |
Der Import deklariert seine eigenen Änderungen:
| Code | Bedeutung |
|---|---|
principal_mapped | Principal-Referenzen werden auf die zugeordneten Zielbenutzer umgeschrieben. |
principal_unmapped | Referenzen auf unzugeordnete Principals werden entfernt. |
seeded_scaffold_removed | Das Einrichtungsgerüst auf dem Ziel wird gelöscht, bevor der Import schreibt. Der Plan listet jedes Element auf. |
redirect_loop_disabled | Weiterleitungen, die eine Schleife bilden, werden deaktiviert importiert. |
search_unsupported | Die Suche wird für die aufgeführten Collections deaktiviert, weil das Ziel PostgreSQL verwendet. |
float4_rounded | Dezimalwerte werden auf die Genauigkeit der PostgreSQL-real-Spalten des Ziels gerundet. |
locale_recased | Sprachen werden in der beim Ziel konfigurierten Schreibweise geschrieben, etwa pt-br als pt-BR. |
Den Import ausführen
Die Ausführung durchläuft diese Phasen in folgender Reihenfolge:
- Das Ziel reservieren und erneut prüfen, ob es leer ist.
- Das im Plan aufgeführte Einrichtungsgerüst entfernen.
- Blocktypen, Collections, Felder, Taxonomie-Definitionen, Relationsdefinitionen und Byline-Felder erstellen.
- Mediendateien in den Speicher des Ziels kopieren und Mediendatensätze erstellen.
- Begriffe und Bylines schreiben.
- Revisionen und Einträge schreiben.
- Begriffszuweisungen, Byline-Credits, Inhaltsreferenzen und SEO-Datensätze schreiben.
- Menüs, Widgets, Sections, Weiterleitungen, Kommentare, Reaktionen und Einstellungen schreiben.
- Suchindizes und Caches neu aufbauen und die Neuindizierung der Mediennutzung einreihen.
- Das Ergebnis verifizieren.
Jeder advance-Aufruf führt einen begrenzten Schritt aus, der in die Anfragelimits von Cloudflare Workers mit D1 passt. Der Fortschritt wird auf dem Server gespeichert. Eine unterbrochene Anfrage verliert höchstens den laufenden Schritt, und jeder Schreibvorgang ist idempotent, sodass die erneute Ausführung eines Schritts keine Datensätze dupliziert.
Während eine andere Anfrage einen Schritt ausführt oder eine andere Anfrage die Operation während eines Schritts übernimmt, gibt advance die Operation mit einem kurzen nextRequestInMs zurück. Ein Speicher- oder Datenbankfehler wird wiederholt: Die Operation zeichnet den Fehler auf, und nextRequestInMs wächst mit jedem aufeinanderfolgenden Fehlschlag. Nach wiederholten Fehlschlägen ohne Fortschritt schlägt der Import fehl.
Schreibvorgänge sind während eines Imports blockiert
Vom ersten Ausführungsschritt bis zum Abschluss des Imports lehnt EmDash Schreibanfragen an seine API mit 503 TRANSFER_IMPORT_IN_PROGRESS ab. Das betrifft den Admin, die REST-API, Plugin-Routen, öffentliche Kommentarübermittlungen, geplantes Veröffentlichen und Inhaltsschreibvorgänge von Plugins. Anmeldung, Benutzer- und API-Token-Verwaltung, Bearbeitungssperren für Einträge und die Transfer-API selbst bleiben verfügbar. Leseanfragen werden nicht blockiert.
MCP-Schreibtools, einschließlich Plugin-MCP-Tools, schlagen mit TRANSFER_IMPORT_IN_PROGRESS im üblichen Tool-Fehler fehl. Schreibgeschützte MCP-Tools und die site_*-Transfer-Tools funktionieren weiterhin, sodass ein über MCP gestarteter Import über MCP fortgesetzt, geprüft und abgeschlossen werden kann.
Nach einer Unterbrechung fortsetzen
Die Admin-Seite treibt einen Import nur voran, solange sie geöffnet ist. Um fortzufahren, öffnen Sie Settings → Transfer erneut, führen Sie emdash site import resume <operation-id> aus oder rufen Sie advance für dieselbe Operation erneut auf. Der Server setzt beim letzten abgeschlossenen Schritt fort. Wenn die unterbrochene Anfrage die Operation noch hielt, wartet der nächste Aufruf, bis diese Sperre abläuft, höchstens fünf Minuten.
Ein fehlgeschlagener oder abgebrochener Import kann nicht fortgesetzt werden.
Einen Import abbrechen
Wählen Sie Cancel import unter Settings → Transfer, führen Sie emdash site import cancel <operation-id> aus oder senden Sie POST imports/{id}/cancel. Ein laufender Schritt stoppt nach seinem aktuellen Stapel. Das Abbrechen entfernt keine bereits geschriebenen Datensätze.
Einen unvollständigen Import aufgeben
Ein fehlgeschlagener oder abgebrochener Import, der bereits mit dem Schreiben begonnen hat, blockiert weiterhin Schreibvorgänge, damit die unvollständige Website nicht versehentlich bearbeitet werden kann. Um die Sperre aufzuheben, wählen Sie Abandon import unter Settings → Transfer, führen Sie emdash site import abandon <operation-id> aus oder senden Sie POST imports/{id}/abandon. Beim Aufgeben bleiben die importierten Daten erhalten.
Nach dem Aufgeben ist die Website nicht mehr leer und kann daher keinen weiteren Import empfangen. Importieren Sie stattdessen in eine neu eingerichtete Website.
Ein fehlgeschlagener oder abgebrochener Import, der nie mit dem Schreiben begonnen hat, blockiert keine Schreibvorgänge und muss nicht aufgegeben werden.
Das Ergebnis verifizieren
Die Verifizierung liest jeden importierten Datensatz mit demselben Code zurück, den der Exporter verwendet, wendet die deklarierten Transformationen des Plans auf die Datensätze des Pakets an und vergleicht beides. Außerdem prüft sie die Datensatzanzahl jeder Art und lädt jede importierte Mediendatei erneut herunter, um ihren Digest zu prüfen. Jede Abweichung lässt den Import mit TRANSFER_VERIFICATION_FAILED fehlschlagen. Das errorDetail der Operation listet bis zu 50 der Abweichungen auf.
Ein erfolgreicher Import erzeugt eine Quittung:
{
"operationId": "01J8ZR2C4S6D8F0G2H4J6K8M0N",
"packageDigest": "sha256:…",
"planDigest": "sha256:…",
"targetSiteId": "01J8ZR0A2B4C6D8E0F2G4H6J8K",
"originSiteId": "01J1A3C5E7G9J1L3N5Q7S9U1W3",
"formatVersion": "1",
"importerEmDashVersion": "0.38.0",
"completedAt": "2026-09-23T10:15:00.000Z",
"logicalDigest": "sha256:…",
"counts": { "entry": 412, "media": 96 },
"warnings": [],
"verification": "verified",
"receiptDigest": "sha256:…"
}
Eine Quittung hält fest, dass die durch targetSiteId identifizierte Ziel-Website zum Zeitpunkt des Abschlusses der Verifizierung genau den Inhalt des durch packageDigest identifizierten Pakets enthielt, nach Anwendung des durch planDigest identifizierten Plans. Der logicalDigest fasst die verifizierten Datensätze zusammen.
receiptDigest ist der SHA-256-Digest des kanonischen JSON der Quittung ohne die Eigenschaft receiptDigest. Er erkennt eine Quittung, die nach ihrer Ausstellung verändert wurde. Eine Quittung ist nicht signiert und beweist daher nicht, welcher Server sie ausgestellt hat. Rufen Sie die Quittung über eine authentifizierte Verbindung vom Ziel ab, wenn das wichtig ist.
Eine Quittung beschreibt die Website zu dem Zeitpunkt, an dem die Verifizierung abgeschlossen wurde. Über spätere Bearbeitungen sagt sie nichts aus.
Zwischen Datenbanken wechseln
Ein Paket hängt nicht von der Datenbank des Ursprungs ab. Exportieren Sie aus SQLite, PostgreSQL oder D1 und importieren Sie in jede davon. Planen Sie die folgenden Unterschiede ein, wenn das Ziel PostgreSQL verwendet:
- PostgreSQL speichert Ganzzahlen mit 32 Bit. Eine Ganzzahl außerhalb dieses Bereichs ist ein
integer_out_of_range-Blocker. - PostgreSQL speichert
number-Felder und Medien-Fokuspunkte als 32-Bit-Gleitkommawerte. Werte, die sich ändern, werden alsfloat4_roundeddeklariert, und die Verifizierung vergleicht die gerundeten Werte. - Die Volltextsuche ist nur auf SQLite und D1 verfügbar. Collections mit aktivierter Suche werden mit deaktivierter Suche importiert und als
search_unsupporteddeklariert.
Der Importer schreibt Medien unter neuen Speicherschlüsseln in das Speicher-Backend des Ziels und schreibt Medienreferenzen in Inhalten, Einstellungen und SEO-Datensätzen entsprechend um. Eine Referenz auf eine Mediendatei, die der Ursprung nicht hat, wird unverändert exportiert und als unknown_storage_key deklariert.
Sicherheit
- Behandeln Sie ein Paket als sensibel. Es enthält alle Inhalte, einschließlich Entwürfen und Papierkorb, sowie die E-Mail-Adressen von Autoren und Kommentierenden. Halten Sie es aus öffentlichen Buckets und freigegebenen Ordnern fern und löschen Sie Kopien, die Sie nicht mehr benötigen.
- Behandeln Sie ein Paket als nicht vertrauenswürdige Eingabe. Der Import prüft Pfade, Größen, Digests, Datensatzschemata, Referenzen und Limits, bevor er schreibt. Er führt niemals Code oder SQL aus einem Paket aus und ruft niemals URLs aus einem Paket ab.
- Vergeben Sie Transfer-Zugriff bewusst. Die Übertragung erfordert die Administratorrolle. Ein Token mit dem Scope
adminkann jede Transfer-Aktion ausführen; geben Sie dem Token eines Agenten daher nur den Transfer-Scope, den er benötigt. - Prüfen Sie das Audit-Log. EmDash protokolliert Transfer-Aktionen im Audit-Log der Website:
transfer_export_create,transfer_import_create,transfer_import_execute,transfer_import_cancel,transfer_import_abandon,transfer_import_complete,transfer_import_fail,transfer_approval_approveundtransfer_approval_deny. Jeder Eintrag nennt den handelnden Benutzer und die Operation oder Genehmigung (Ressourcentyptransfer_operationodertransfer_approval). Seine Details enthalten nur IDs, Digests, Datensatzanzahlen und Fehlercodes, niemals Paketinhalte. Ebenso enthalten die Details von Transfer-Fehlern niemals Paketinhalte. - Halten Sie den Zwischenspeicher privat. EmDash legt Paketdateien unter dem Präfix
transfers/Ihres Speicher-Buckets ab und weigert sich, dieses Präfix über seine Medienroute auszuliefern. Wenn der Bucket eine öffentliche Domain hat, beschränken Sie sie auf Medien, wie bei Backups. Zwischengespeicherte Dateien werden gelöscht, nachdem eine Operation endet oder abläuft.
Token-Scopes
Die Übertragung verwendet drei API-Token-Scopes:
| Scope | Erlaubt |
|---|---|
transfer:export | Exporte starten, vorantreiben und herunterladen. |
transfer:analyze | Importe erstellen, Paketdateien hochladen, analysieren und Pläne lesen. |
transfer:execute | Importe starten, vorantreiben, abbrechen und aufgeben. |
Der Scope admin umfasst alle drei, sodass das von emdash login gespeicherte Token jede Übertragung ausführen kann. Jeder Transfer-Scope gewährt nur seine eigenen Aktionen, und nur ein Administrator kann einen solchen ausstellen. Verwenden Sie sie, um einem Token engeren Zugriff als admin zu geben, zum Beispiel einem Agenten, der Pakete analysieren, aber nicht exportieren oder importieren darf. Siehe die Scope-Referenz.
Genehmigungen für Agenten
KI-Agenten steuern Übertragungen über die site_*-MCP-Tools. Die Tools starten Operationen, treiben sie voran und berichten darüber. Sie übertragen niemals Paket-Bytes, daher lädt der Benutzer eines Agenten Exporte herunter und Pakete hoch – mit der CLI oder der REST-API. Jedes Tool erfordert die Admin-Rolle.
Ein MCP-Client, dessen Token weder admin noch den passenden Transfer-Scope hat – etwa ein Agent, dem nur transfer:analyze gewährt wurde –, kann einen Export oder Import nicht allein starten. Sein Aufruf von site_export_start oder site_import_start erstellt eine ausstehende Genehmigungsanfrage und schlägt mit TRANSFER_APPROVAL_REQUIRED und der Genehmigungs-ID fehl. Ein Administrator genehmigt oder lehnt die Anfrage unter Approval requests in Settings → Transfer ab, wo jede ausstehende Anfrage mit ihrem Anfragenden, ihrer Aktion und ihrer Ablaufzeit aufgeführt ist. Die nur mit Sitzung nutzbaren Endpunkte POST /_emdash/api/admin/transfer/approvals/{id}/approve und …/deny tun dasselbe. API-Tokens können keine Anfragen genehmigen. Der Client wiederholt den Aufruf anschließend mit der Genehmigungs-ID. Genehmigungen gelten nur für diese MCP-Tools; die REST-API hat keinen Genehmigungsparameter.
Eine Genehmigung gewährt dem anfragenden Benutzer einen Aufruf, vom selben Token, mit denselben Argumenten. Eine Exportgenehmigung ist an die Exportoptionen gebunden. Eine Importgenehmigung ist an die Operation und beide Digests gebunden, sodass ein geänderter Plan eine neue Genehmigung benötigt. Eine ausstehende Anfrage läuft nach 15 Minuten ab, eine genehmigte 15 Minuten nach der Genehmigung. Der Wiederholungsaufruf, der die Operation startet, verbraucht sie; wenn die Operation nicht startet, kann dieselbe Genehmigung bis zu ihrem Ablauf erneut verwendet werden. Derselbe Benutzer und dasselbe Token können diese eine Operation anschließend ohne den Scope prüfen und vorantreiben.
Gewähren Sie dem Token eines Agenten transfer:export, transfer:execute oder admin nur dann, wenn der Agent Übertragungen ausführen muss, ohne dass eine Person jede einzelne genehmigt.
Limits
| Limit | Wert |
|---|---|
manifest.json | 8 MiB |
| Ein Datensatz | 1.900.000 Bytes |
| Eine Datensatz- oder Indexdatei | 4 MiB und 1.000 Datensätze |
| Datensätze pro Paket | 5.000.000 |
| Dateien pro Paket | 1.000.000 |
| JSON-Verschachtelungstiefe | 64 |
| Eine Mediendatei | Die maxUploadSize des Ziels, standardmäßig 50 MiB |
Der Endpunkt capabilities meldet die Werte, die die Website durchsetzt.
Für Hosting-Anbieter
Eine Hosting-Steuerungsebene kann die Website eines Kunden allein mit der REST-API in die Produktion verschieben:
-
Stellen Sie eine neue EmDash-Website mit ihrem Speicher, ihren Sprachen und ihrer
maxUploadSizebereit und schließen Sie die Einrichtung ab. Prüfen Sie, dasscapabilitiesfürportableDomain.emptyden Werttruemeldet. -
Stellen Sie für die Steuerungsebene ein Token mit
transfer:analyzeundtransfer:executeaus. Halten Sie es von jedem Agenten und jedem Website-Erstellungstool fern. -
Führen Sie den Import aus und wenden Sie vor der Ausführung Ihre eigene Richtlinie auf die Warnungen des Plans an. Lehnen Sie jeden Plan mit Blockern ab.
-
Rufen Sie die Quittung ab und prüfen Sie sie, bevor Sie die Website freigeben:
verificationistverified;packageDigestist der Digest des Pakets, das Sie veröffentlichen wollten;planDigestist der Plan, den Sie akzeptiert haben;targetSiteIdist die Website, die Sie freigeben wollen; undreceiptDigeststimmt mit dem kanonischen JSON der Quittung überein.
-
Geben Sie die Website frei, zum Beispiel indem Sie ihre Domain auf sie routen.
Halten Sie das Ziel unerreichbar, bis Schritt 4 erfolgreich ist. EmDash verbirgt eine teilweise importierte Website nicht vor Besuchern.
Fehlerbehebung
Transfer-Fehler verwenden stabile Codes. Der HTTP-Status wird bei jedem Code angegeben.
| Code | Status | Was zu tun ist |
|---|---|---|
TRANSFER_TARGET_NOT_EMPTY | 409 | Das Ziel enthält bereits Inhalte. Importieren Sie in eine neu eingerichtete Website. Settings → Transfer und capabilities listen auf, was die Website ungeeignet macht. |
TRANSFER_IMPORT_IN_PROGRESS | 503 | Auf dieser Website läuft ein Import, oder ein unvollständiger Import blockiert noch Schreibvorgänge. Warten Sie, bis er abgeschlossen ist, oder geben Sie einen fehlgeschlagenen oder abgebrochenen Import auf. |
TRANSFER_FENCE_CHECK_FAILED | 503 | EmDash konnte nicht prüfen, ob ein Import läuft. Wiederholen Sie den Schreibvorgang. |
TRANSFER_EXPORT_CONCURRENT_WRITES | 409 | Die Website hat sich während des Exports ständig geändert. Exportieren Sie erneut, wenn gerade nicht bearbeitet wird. |
TRANSFER_EXPIRED | 410 | Die Dateien des Exports wurden nach sieben Tagen gelöscht, oder ein Import wurde nicht innerhalb von 24 Stunden ausgeführt. Beginnen Sie erneut. |
TRANSFER_FILE_MISSING | 422 | Einige deklarierte Dateien wurden nicht hochgeladen. Laden Sie alles hoch, was imports/{id}/missing auflistet. |
TRANSFER_FILE_NOT_DECLARED | 422 | Der Upload-Pfad ist nicht im Paket enthalten. Laden Sie nur aufgeführte Pfade hoch. |
TRANSFER_FILE_SIZE_MISMATCH | 422 | Content-Length oder die hochgeladenen Bytes weichen von der deklarierten Größe ab. Laden Sie die Datei unverändert hoch. |
TRANSFER_FILE_DIGEST_MISMATCH | 422 | Die hochgeladenen Bytes weichen vom deklarierten Digest ab, oder eine Exportdatei hat sich nach dem Export geändert. Laden Sie die Originaldatei hoch oder exportieren Sie erneut. |
TRANSFER_LIMIT_EXCEEDED | 413 | Eine Datei überschreitet ein Limit. Erhöhen Sie bei Medien die maxUploadSize des Ziels. |
TRANSFER_MANIFEST_INVALID | 422 | Der Anfrage-Body ist kein gültiges Manifest. Senden Sie manifest.json Byte für Byte. |
TRANSFER_UNSUPPORTED_FORMAT | 422 | Aktualisieren Sie EmDash auf dem Ziel. |
TRANSFER_UNSUPPORTED_FEATURE | 422 | Aktualisieren Sie EmDash auf dem Ziel. |
TRANSFER_CONTAINER_INVALID | 422 | Die .emdash-Datei ist kein gültiges Paketarchiv. Laden Sie sie erneut herunter. |
TRANSFER_PLAN_BLOCKED | 409 | Der Plan enthält Blocker. Siehe Importplan überprüfen. |
TRANSFER_PACKAGE_DIGEST_MISMATCH | 409 | Der Digest stimmt nicht mit dem zwischengespeicherten Paket überein. Verwenden Sie den packageDigest der Operation. |
TRANSFER_PLAN_DIGEST_MISMATCH | 409 | Der Plan hat sich geändert, seit Sie ihn überprüft haben. Lesen Sie den aktuellen Plan und überprüfen Sie ihn erneut. |
TRANSFER_DECISIONS_INVALID | 422 | Eine Entscheidung nennt einen unbekannten Principal oder einen Zielbenutzer, der nicht existiert. Korrigieren Sie die Zuordnung. |
TRANSFER_INVALID_STATE | 409 | Die Operation befindet sich nicht in einem Zustand, der die Anfrage erlaubt. Lesen Sie die Operation und richten Sie sich nach ihrem state. |
TRANSFER_LEASE_ACTIVE | 409 | Eine andere Anfrage führt gerade einen Schritt aus. Warten Sie und versuchen Sie es erneut. |
TRANSFER_IDEMPOTENCY_CONFLICT | 409 | Der Idempotency-Key wurde bereits für einen Export mit anderen Optionen oder für einen Import eines anderen Pakets verwendet. Verwenden Sie einen neuen Schlüssel. |
TRANSFER_RUNTIME_MISMATCH | 409 | Eine inkompatible EmDash-Version hat die Operation gestartet. Schließen Sie sie mit der Version ab, die sie gestartet hat, oder starten Sie eine neue. |
TRANSFER_VERIFICATION_FAILED | 422 | Die importierte Website stimmt nicht mit dem Paket überein. Lesen Sie die Abweichungen in errorDetail, geben Sie den Import auf und importieren Sie in eine neue Website. |
TRANSFER_APPROVAL_REQUIRED | 403 | Ein Administrator muss die Anfrage genehmigen. Siehe Genehmigungen für Agenten. |
TRANSFER_APPROVAL_INVALID | 403 | Die Genehmigung ist unbekannt, abgelehnt, abgelaufen, verbraucht oder an andere Parameter gebunden. Fordern Sie eine neue an. |
TRANSFER_SCHEMA_UNCLASSIFIED | 500 | Die Datenbank enthält eine Tabelle oder Spalte, die der Exporter nicht erkennt. Verwenden Sie die EmDash-Version, die zu den Migrationen der Datenbank passt. |
INSUFFICIENT_SCOPE | 403 | Das Token hat weder admin noch den Transfer-Scope, den die Anfrage benötigt. Stellen Sie ein Token mit dem Scope aus. |