在 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 断点:
- Drupal\migrate\MigrateException
- Drupal\migrate\MigrateSkipRowException(对被忽略的行最有用)
- 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 | |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+
我使用 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 断点:
- Drupal\migrate\MigrateException
- Drupal\migrate\MigrateSkipRowException(对被忽略的行最有用)
- 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 | |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+