在 Drupal 8 迁移中调试忽略项的方法

What way to debug ignored items in Drupal 8 migration

我使用 migrate_upgrade 模块创建了迁移脚本,但是在迁移时我有很多被忽略的项目,我尝试使用迁移工具中的 drush mmsg 但它对忽略的字段没有帮助,只有失败。

我不确定是否有 "more proper" 方法来调查单个迁移作业的情况,但我只是查看我的 migrate_* 数据库 table。它没有告诉我特定行失败的原因,但至少我将能够准确地确定我需要调查哪些行。

在与您感兴趣的迁移作业匹配的 migrate_* table 中,查找 destid1 值为 NULL 的行。

如上所述,一旦您确定了该行,有时仍然很难找到。我的情况是它触发了对先前导入的实体的更新,然后抛出跳过行异常。

您可以通过观察 MigrateExecutable::import() 中的 while($source->valid()) 循环找出抛出异常的原因。它在第 198 行附近(目前)。它有一个 try-catch ,它将捕获异常告诉它跳过该行。

如果您有调试器,请为您跳过的 ID 设置监视,然后从异常中获取触发它的行和文件。

如果你不这样做,值得得到一个,但你可以在 sourceIdValues 的基础上添加一个 if 并打印 $e->getLine() $e->getFile() 来获得抛出异常。

我的偏好是使用 xdebug 和 PHP 异常断点来探索抛出各种迁移异常时发生的情况。我使用 PHPStorm,所以我使用 运行 > 查看断点菜单项来拉断点 window。然后我添加以下 PHP 断点:

  1. Drupal\migrate\MigrateException
  2. Drupal\migrate\MigrateSkipRowException(对被忽略的行最有用)
  3. Drupal\migrate\MigrateSkipProcessException

然后我执行迁移(在此之前,您必须确保 PHPStorm 正在侦听并正确地使用 xdebug 来设置断点等等)。当抛出这些异常之一时 PHPStorm 停止调用。我使用 Frames window 浏览调用堆栈,查看随时间变化的变量。这使得在每个步骤中轻松识别字段和数据(源、目标、行等)。

您正在从 Drupal 7 迁移到 Drupal 8,并且在 运行 迁移后忽略了项目。这就引出了一个非常重要的问题,哪些被忽略了?

所见即所得

[notice] Processed 632 items (630 created, 0 updated, 0 failed, 2 ignored) - done with 'node_form'

以上是我将在示例中使用的内容。

你想知道的

哪些项目被忽略了!?为此,我们可以查看数据库。我假设您可以访问控制台...

您数据库中的 migrate_map_migration_name table 将为您提供所需的信息。将有一个名为 source_row_status 的列。 2 的值等于被忽略的状态。所以 运行 以下 MySQL 命令:

SELECT * FROM `migrate_map_node_form` WHERE source_row_status = 2;

返回行的 sourceid1 列将包含被忽略的项目的 ID。

示例输出:

+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+
| source_ids_hash                                       | sourceid1 | destid1 | source_row_status | source_row_status | last_imported | hash |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+
| 8530eb5d63ad4cfea47134a28e3339e089f639164d218287c3... | 10931     | NULL    | 2                 | 0                 | 0             |      |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+
| ddd550e747c2a26a2a5058d49be0e146616fd5c45f6bef88f3... | 11656     | NULL    | 2                 | 0                 | 0             |      |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+