Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,090 of 9,090 pages
About the help in other languages
All help pages

Migrationen: Fehlerbehebung

Diese Seite nennt die Meldungen, die die Migrationsbefehle ausgeben, was jede bedeutet und was zu tun ist. Die Meldungen sind Englisch. Meldungen, die mit FAIL: beginnen, sind Fehler (der Exit-Code ist nicht 0); Zeilen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/guides/migrations-troubleshooting.md

On this page

This page is a translation. Read the English original

Migrationen: Fehlerbehebung

Diese Seite nennt die Meldungen, die die Migrationsbefehle ausgeben, was jede bedeutet und was zu tun ist. Die Meldungen sind Englisch. Meldungen, die mit FAIL: beginnen, sind Fehler (der Exit-Code ist nicht 0); Zeilen mit WARN sind Warnungen, der Befehl ist trotzdem bestanden. Jeder Befehl kann seinen Bericht auch als JSON ausgeben (--format=json), mit denselben Texten in errors und warnings.

Sie suchen nach dem, was Sie sehen, statt nach der Meldung (ein gescheiterter Lauf, eine Migration, die nicht läuft, ein Push, der wartet, ein Lauf in der Administration, der nicht startet)? Wenn eine Migration scheitert: Fehlerbehebung nach Symptom.

Anleitungen · Migrationen: der Einstieg · Migrationen · Siehe auch: Zurücknehmen und Sicherungspunkte, Das Migrations-Repository, PHP-Migrationen

Exit-Codes

CodeBedeutet
0erledigt, oder nichts zu tun
1eine Migration ist gescheitert, eine Prüfung hat ein Problem gefunden, die Sperre war belegt, eine geänderte Datei wurde abgelehnt, oder etwas steht aus mit exp:migration:status --fail-on-pending
2Bedienung: eine Option ist falsch oder fehlt (--apply mit --dry-run, --force ohne --reason, ein unbekanntes Ziel), oder nicht committeter Code hat einen Lauf abgelehnt
3die Datenbank ist nicht erreichbar
4interner Fehler

Vor einem Lauf

the table exp_migration does not exist yet: run ./console exp:upgrade --apply first (step 6.0.15-migration-tables) Die Aufzeichnungstabellen legt ein Upgrade-Schritt an. Führen Sie ./console exp:upgrade --apply aus (oder nur die Datenbankstufe, ./console exp:upgrade:database --apply). exp:migration:status zeigt die Migrationen trotzdem und warnt stattdessen.

no migrations found (Warnung) Keine Datei YYYYMMDDHHMMSS_name.<typ> in den durchsuchten Ordnern. Sehen Sie in exp:migration:check nach, das die durchsuchten Ordner nennt; [MigrationSettings] Enabled=disabled findet keine; die Migrationen einer Erweiterung werden nur gefunden, solange die Erweiterung aktiv ist.

no migrations directory: [MigrationSettings] DirectoryList in migration.ini names none exp:migration:generate hat keinen Ordner zum Schreiben. Setzen Sie DirectoryList[]=migrations in settings/override/migration.ini.append.php.

<file> is not a migration file name (YYYYMMDDHHMMSS_name.type, ...), <file> does not start with a valid date and time (YYYYMMDDHHMMSS), <file> has the unknown type ..., unknown header key ..., the header key ... is given twice, maintenance: ... is not yes or no Die Prüfung der Dateinamen und Köpfe (das Dateiformat). Beheben Sie die Datei; exp:migration:check zeigt jedes Problem auf einmal.

the migration <id> requires <dep>, which does not exist, ... which does not run in the environment <env>, the migration <id> requires the extension <name>, which is not active Eine Anforderung im Kopf nennt eine ID, die keine Datei hat, eine Migration, die auf andere Umgebungen beschränkt ist, oder eine Erweiterung, die nicht aktiv ist. Korrigieren Sie den Kopf oder aktivieren Sie die Erweiterung.

the migrations <ids> wait for each other (a cycle in requires ...), the migration <id> is defined twice (...) Zwei Migrationen verlangen einander, oder eine ID gibt es in zwei Quellen (die zuerst gefundene wird verwendet: Site vor Erweiterungen vor Paketen). Solange einer davon da ist, läuft nichts. Lösen Sie den Zyklus auf oder benennen Sie die zweite Datei um.

... requires ..., which is pending and not selected: add it to --only or --path --only oder --path hat eine Migration ausgewählt, deren Anforderung noch nicht gelaufen ist. Nehmen Sie die Anforderung in die Auswahl auf oder führen Sie den Lauf ohne Auswahl aus.

no statements for <engine>; missing: skip lets the step pass Eine SQL-Migration oder ein Schritt sql hat nichts für die Engine dieser Installation: Ergänzen Sie die Datei (<id>.<engine>.sql, <id>.mongodb.json) oder den Schlüssel der Engine, oder missing: skip, wenn dort nichts zu tun ist (SQL und Einstellungen).

INI: line N: [Block] does not name its file Ein Block einer INI-Migration nennt die Datei, die er ändert: [site.ini/Block] oder [siteaccess:<name> site.ini/Block] (SQL und Einstellungen).

PHP: no class: a PHP migration declares one class that extends expMigrationPhp, more than one class extends expMigrationPhp, the class ... is declared by ... too, PHP syntax: ... Jede PHP-Datei deklariert genau eine nicht abstrakte Klasse, die \expMigrationPhp erweitert, mit einem Namen, den keine andere Datei deklariert; nutzen Sie einen Namensraum (PHP-Migrationen).

no namespace: two migrations of different sites or extensions could declare the same class (Warnung) Legen Sie die Klasse in einen Namensraum, wie es das Gerüst tut.

<n> change(s) that are not committed in the code trees (...): commit them first, or run with --include-uncommitted to keep them in the caption (Exit-Code 2) settings/, extension/ oder design/ ([CaptionSettings] CodeTreeList[]) haben Änderungen, die Git nicht kennt. Ein Sicherungspunkt bewahrt den Commit des Codes auf, nicht den Code. Committen Sie die Änderungen oder führen Sie den Lauf mit --include-uncommitted aus.

the user to run as does not exist: [RunSettings] RunAsUser=admin (migration.ini) Die Konsole läuft als RunAsUser, gefunden über das Login. Setzen Sie es auf einen vorhandenen Administrator, oder geben Sie --login=<login> an.

Die Sperre

another run holds the lock: migration run <run-id> by <user> (pid <pid> on <host>) since <time> Ein exp:upgrade oder ein anderer Migrationslauf schreibt gerade. Warten Sie; ./console exp:migration:status zeigt den Halter.

Eine verwaiste Sperre: ..., stale: its process has ended Die Sperre ist eine Dateisperre, die der Prozess hält, ein abgebrochener Lauf gibt sie also sofort frei. Zurückbleiben kann die Halter-Datei var/<site>/upgrade.lock.holder; der Status meldet den Halter dann als verwaist, und der nächste Lauf übernimmt und schreibt seine eigene. Von Hand muss nichts entfernt werden.

Während eines Laufs

<id> changed after it was applied (checksum ... -> ...); a run with --force --reason=<text> accepts the change Die Datei einer gelaufenen Migration wurde seitdem bearbeitet. Nehmen Sie die Bearbeitung zurück und schreiben Sie die Änderung in eine neue Migration, oder nehmen Sie sie an, wenn sie nicht ändert, was die Migration getan hat (ein Kommentar, ein Tippfehler): ./console exp:migration:migrate --apply --force --reason="a comment only". Die Migration läuft nicht noch einmal; die neue Prüfsumme wird aufgezeichnet und die Annahme im Audit festgehalten.

--force needs a --reason=<text>: why the changed migrations are accepted, --reason goes with --force (Exit-Code 2) Die beiden Optionen gehören zusammen.

Eine Migration failed mit einer Meldung Die Ausnahme, die up() geworfen hat. Der Lauf hat angehalten, die Transaktion der Migration wurde zurückgerollt und der Sicherungspunkt von vor dem Lauf wiederhergestellt (Restore: restored). Beheben Sie die Ursache und führen Sie den Lauf erneut aus, oder ./console exp:migration:resume --apply.

<id>: skipped, its state cannot be told: ... (Warnung, Zustand unknown) detect() hat geworfen. Die Migration läuft nicht; beheben Sie detect() (es darf nichts brauchen, was die Migration erst anlegt).

blocked / waits for <id> Mit [RunSettings] StopOnFailure=disabled läuft eine Migration nicht, die eine gescheiterte verlangt.

Teilweise Änderungen auf MySQL/MariaDB, Oracle und MongoDB Die Schemaänderungen einer gescheiterten Migration bleiben auf MySQL/MariaDB und Oracle (sie werden sofort committet), und auf MongoDB bleibt jede Änderung: Dort ist die Wiederherstellung des Sicherungspunkts der Weg zurück. Mit --no-restore oder ohne Sicherungspunkt nehmen Sie die Änderungen von Hand zurück oder stellen den Sicherungspunkt wieder her: ./console exp:migration:rollback <run-id> --apply.

Sicherungspunkte und Wiederherstellung

no caption could be taken, the run goes on without a way back: ... (Warnung) Der Sicherungspunkt ist gescheitert (kein Sicherungswerkzeug für die Engine, eine volle Platte, ein scheiternder git_manager). Der Lauf ging weiter. Beheben Sie die Ursache (./console exp:migration:caption --apply legt zum Testen einen an) oder halten Sie an und machen Sie selbst eine Sicherung.

no caption before the run (--no-caption or [CaptionSettings] Before=disabled): a failure cannot be restored automatically (Warnung) Wie es dasteht. Bei einem Fehler nennt der Bericht dann die Schritte zur Wiederherstellung von Hand.

no caption was taken before the run: nothing was restored; restore by hand: gefolgt von nummerierten Schritten Ein Fehler ohne Sicherungspunkt. Folgen Sie den Schritten: Wartungsmodus ein, die Datenbank aus Ihrem eigenen Abzug wiederherstellen, settings/override und var/ zurücklegen, ./console exp:velocity deploy, ./console exp:upgrade:verify --after, Wartungsmodus aus.

no built-in restore for oracle: restore it by hand Sicherungspunkte auf Oracle haben keine eingebaute Wiederherstellung. Der Bericht nennt die Schritte (ein impdp Ihres eigenen Exports).

the restore of the caption <id> failed: ... Die automatische Wiederherstellung ist nicht durchgelaufen. Der gescheiterte Zustand steckt im Sicherungspunkt migration-failure. Stellen Sie von Hand wieder her: ./console exp:migration:rollback <run-id> --apply (oder exp:upgrade:rollback <caption> --apply), dann ./console exp:upgrade:finish --apply.

the caption after the run could not be taken: ... (Warnung) Der Lauf ist bestanden; nur der Sicherungspunkt danach ist gescheitert. Der nächste Lauf legt einen neuen Sicherungspunkt vorher an.

Das Repository

Das sind Warnungen: Der Lauf selbst ist für sich bestanden oder gescheitert.

git_manager is not active: the record of the run is not committed Commits gehen über git_manager. Installieren Sie ihn, oder setzen Sie [RepositorySettings] Commit=disabled.

<path> is not a git repository ([RepositorySettings] Mode=...) Mit Mode=site ist die Installation kein Git-Checkout; mit Mode=separate ist der Ordner Path kein Repository. Führen Sie dort git init aus, oder setzen Sie Commit=disabled.

<path> is on the branch <x>, not <y> ([RepositorySettings] Branch), ... is on no branch Checken Sie den Branch aus, oder leeren Sie Branch.

git add failed for ... (ignored by .gitignore?) migrations/status/ oder migrations/runs/ werden ignoriert. Entfernen Sie sie aus .gitignore.

the tag <name> exists already: it is never moved, the commit stays untagged Eine Lauf-ID wurde wiederverwendet, oder das TagPattern ergibt zweimal denselben Namen (etwa nur <date>). Nehmen Sie <run-id> auf.

the push to origin failed (exit 128): the commit stays local and is pushed again by the cronjob part migrationpush Beheben Sie das Remote oder seine Zugangsdaten, dann ./console exp:migration:push --apply, oder überlassen Sie es dem Cronjob-Teil migrationpush.

not pushed: the repository has no remote origin Fügen Sie das Remote hinzu, oder setzen Sie [RepositorySettings] Remote auf den richtigen Namen (leer für keinen Push).

Nach einem Lauf

Velocity oder PHP-FPM sehen eine Änderung nicht Eine Migration, die eine Klasse, eine Einstellung oder ein Template hinzufügt, braucht eine Bereitstellung wie jede Code-Änderung: ./console exp:velocity deploy (Caches, PHP-FPM, Velocity), oder ./console exp:upgrade:finish --apply nach einer Wiederherstellung.

<id> (site) is recorded as done, but its file is not found any more (Warnung, orphan) Die Aufzeichnung hat eine Migration, deren Datei gelöscht oder umbenannt wurde. Benennen Sie sie zurück; eine gelaufene Migration sollte nicht umbenannt werden. Die Zeile bleibt in der Aufzeichnung und schadet nicht.

Ein Lauf, dessen Zeile noch running sagt Der Prozess wurde beendet. ./console exp:migration:resume findet ihn (kein Prozess hält die Sperre mehr) und schließt ihn mit --apply als gescheitert ab und führt aus, was noch aussteht, in einem neuen Lauf.

Verwandte Seiten

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x