我使用migrate_upgrade模块创建了迁移脚本,但是在迁移时我有很多被忽略的项目,我尝试使用来自迁移工具的drush mmsg,但是对于忽略的字段只有失败才有帮助。
答案 0 :(得分:6)
我不确定是否有一种“更合适”的方式来调查各个迁移作业的情况,但我只是查看我的migrate_ *数据库表。它没有告诉我特定行失败的原因,但至少我能够确切地确定我需要调查哪些行。
在与您感兴趣的迁移作业匹配的migrate_ *表中,查找destid1值为NULL的行。
答案 1 :(得分:5)
如上所述,一旦您确定了该行,它有时仍然很难找到。我的情况是它触发了先前导入的实体的更新,然后抛出了行跳过异常。
您可以通过观看while($source->valid())
中的MigrateExecutable::import()
循环来计算抛出异常的内容。它在第198行(目前)附近。它有一个try-catch,可以捕获异常,告诉它跳过这一行。
如果您有调试器为您跳过的ID设置监视,然后从异常中获取行和文件触发它。
如果你没有,那么值得一个,但你可以根据if
添加sourceIdValues
并打印$e->getLine()
{{1}获取抛出异常的位置。
答案 2 :(得分:0)
我的喜好是使用xdebug和PHP异常断点来探索引发各种迁移异常时发生的情况。我使用PHPStorm,所以使用“运行”>“查看断点”菜单项来调出断点窗口。然后,添加以下PHP断点:
然后我执行迁移(在此之前,您必须确保PHPStorm正在侦听并正确使用xdebug来获取断点和其他功能)。当引发这些异常之一时,PHPStorm停止调用。我使用“框架”窗口浏览调用堆栈,并逐步查看变量。这样一来,就可以轻松地在每个步骤中识别字段和数据(源,目标,行等)。
答案 3 :(得分:0)
您正在从Drupal 7迁移到Drupal 8,并且在运行迁移后已忽略了项目。这导致了一个非常重要的问题,即哪些被忽略了?
[notice] Processed 632 items (630 created, 0 updated, 0 failed, 2 ignored) - done with 'node_form'
以上是我将在示例中使用的内容。
哪些项目被忽略!?为此,我们可以查看数据库。我认为您可以访问控制台...
数据库中的migrate_map_migration_name
表将为您提供所需的信息。将有一个名为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 | |
+-------------------------------------------------------+-----------+---------+-------------------+-------------------+---------------+------+