
- MODX 2
- MODX 3
- PHP 7.4
- PHP 8.1


status --strict вернул 2 Это означает, что хотя бы одна группа pending, drifted, missing или outOfOrder не пуста. Запустите обычный status, затем разберите соответствующий раздел ниже. Сам код 2 не означает ошибку PHP или подключения MODX.
pending больше нуля Файл ещё не применён либо его последняя попытка имеет статус failed.
up --dry-run.output его строки в таблице журнала.up.Не меняйте успешно применённые старые файлы вместе с исправлением — это создаст drift. Для дополнительного изменения создайте новую миграцию.
drifted больше нуля SHA-256 файла отличается от значения, записанного при применении.
Предпочтительное решение — вернуть файл к применённой версии из Git. Если изменение действительно должно затронуть базу, создайте новый файл.
up --ignore-checksum допустим только когда:
Dry-run с флагом показывает строки [ACCEPTED], но журнал меняет только обычный up --ignore-checksum.
missing больше нуля Журнал знает миграцию, которой нет в каталоге. Обычно файл удалили, переименовали или не доставили на эту среду.
Верните тот же файл с тем же именем и содержимым. Раннер намеренно не удаляет историю автоматически и не предоставляет команду «забыть миграцию».
outOfOrder больше нуля Новая датированная миграция сортируется раньше последней уже применённой. Причины: метку написали вручную, ветки Git создали файлы независимо или часы машин различались.
Если файл ещё нигде не применён, дайте ему более позднее имя либо пересоздайте через new. Старое имя не должно оставаться в каталоге.
--allow-out-of-order используйте только при осознанном восстановлении истории: он отключает защиту, но не анализирует зависимости между миграциями.
MySQL не выдал проектную блокировку без ожидания. Проверьте deploy, cron и ручные SSH-сессии, работающие с той же базой.
Не пытайтесь обходить блокировку вторым конфигом: два процесса смогут одновременно менять схему. Если процесс аварийно завершён, MySQL освобождает advisory lock при закрытии его соединения.
Проверьте migrations_path и правило разрешения путей: относительное значение считается от каталога PHP-конфига. Для status и up каталог должен существовать.
Команда new --apply создаёт отсутствующий каталог с режимом 0775, но родительский каталог должен быть доступен на запись текущему пользователю.
Неверен modx_root. Он должен указывать на корень конкретной установки MODX, а не на core/ или каталог компонента.
<modx_root>/index.php;<modx_root>/config.core.php, а затем Composer autoload в корне сайта или core/.Для конфига core/config/mxmigrations.php типовое значение:
'modx_root' => dirname(__DIR__, 2),Проверьте по порядку:
autoload существует относительно каталога конфига;recipe_providers загружается этим autoload;MigrationRecipeProviderInterface.Ошибки провайдеров возникают при создании приложения, до чтения и выполнения проектных миграций.
model:build требует сначала применить миграцию В реестре изменений модели есть миграция, которая ещё не отмечена применённой. Выполните up --dry-run, затем up. Модель разрешено записывать только после успешного изменения базы, иначе xPDO начнёт использовать поля, которых ещё нет.
Одна таблица описана в нескольких XML-схемах из раздела models. Повторите new с явным --model=имя. Пакет не выбирает владельца произвольно, потому что это изменило бы не ту схему и каталог модели.
Убедитесь, что для сторонней модели включён overlay => true, а файл migrations/.mxmigrations/model-changes.php доставлен из репозитория. Затем повторите model:build --model=minishop2 --apply: проектные изменения будут наложены на обновлённую штатную схему.
Новый файл обязан завершаться callable. Для MODX 2:
return function (modX $modx): void {
// Изменение.
};Для MODX 3 тип аргумента — \MODX\Revolution\modX.
Если файл сам выполняет bootstrap ядра, он относится к legacy-формату и должен завершаться как самостоятельный CLI-скрипт с кодом 0. Не смешивайте два формата в одном файле.
baseline отметил лишние файлы baseline помечает все текущие pending одним вызовом и не имеет фильтра по имени. До команды обязательно проверяйте status и содержимое каталога.
Если файл отмечен ошибочно, не правьте таблицу журнала без расследования: сначала определите фактическое состояние базы и создайте корректирующую миграцию. Ручное удаление строки может повторно запустить потенциально неидемпотентный код.
php core/components/mxmigrations/bin/mxmigrations.php status --strict
php core/components/mxmigrations/bin/mxmigrations.php up --dry-run
php core/components/mxmigrations/bin/mxmigrations.php up --by=deploy
php core/components/mxmigrations/bin/mxmigrations.php status --strictВо всех командах выше подразумевается --config=... или MXMIGRATIONS_CONFIG. Перед up добавьте резервную копию средствами проекта: mxMigrations отвечает за историю изменений, но не создаёт бэкап.