跳到内容
必威体育论坛必威精装下载APPRedfin解决方案的标志必威体育论坛必威精装下载APPRedfin解决方案的标志 联系
实现hook_cron的示例代码

自定义迁移Cron作业

2022年11月Drupal社区和Drupal安全团队将停止对Drupal 7的支持。到那时,所有Drupal网站都需要在Drupal 8上继续接收社区的更新和安全修复。从Drupal 7到Drupal 8的转变是一个棘手的迁移,通常需要复杂的数据转换,以使遗留内容适应Drupal的新范式。如果您是Drupal迁移的新手,可以阅读官方文档Drupal迁移API,跟随毛里西奥·迪纳尔特31天的Drupal迁移你也可以观看Redfin Solutions的Ch必威体育论坛必威精装下载APPris Wells的速成课训练.本系列博客将涵盖更高级的主题,如小众迁移工具、内容重组和各种自定义代码解决方案。

将内容从旧的Drupal 7网站迁移到新的Drupal 8重建网站是有一定宽容的。保留旧内容及其所有异常值可能是复杂和乏味的。然而,它通常只在生产中运行一次,然后进行扩充并完成。为将来的迁移做笔记,然后继续前进。这种宽容不适用于正在进行的迁移,这些迁移需要定期运行以保持网站内容的更新。它可以是任何东西,从一个网站的目录到最新的新闻和事件数据来自网站外部,需要自定义迁移。在这里,代码需要一致地工作并优雅地报告错误。

要在cron上运行这些迁移,有几个不同的选项。最简单的是使用类似的模块迁移Cron调度程序Cron迁移.这两种方法都允许您快速选择在cron上运行的自定义迁移并选择其频率。然而,Migrate Cron Scheduler允许用户在迁移导入中配置“update”和“sync”标志。

"update"标志将更新所有先前导入的实体。“sync”标志还将删除任何以前导入的不再在源数据库中的实体,以便源和目标同步。

这些模块还允许您选择迁移组,以便迁移导入将自动尊重迁移的依赖性.缺点是,任何需要与迁移一起运行的自定义代码都必须被分割成不同的cron作业,并且这些模块上没有设置在一天中的特定时间或不规则频率运行迁移。


对于需要这些额外特性的情况,请安装和配置最终Cron模块。这是一个功能强大的工具,可用于将任何cron作业调优到精确的时间和频率。Ultimate Cron和迁移Cron模块的组合将涵盖大多数用例。然而,我如果在迁移运行之前或之后需要自定义代码或报告,则可能需要自定义cron作业。为了建造这个,g到您的自定义迁移模块并创建hook_cron函数。这个文件需要使用以下类:

使用Drupal \ migrate_tools \ MigrateExecutable;使用Drupal \ \ MigrateMessage迁移;使用Drupal \ \插件\ MigrationInterface迁移;

确切地说,你如何配置这个钩子取决于你的情况。对于希望在这个cron作业上运行的每个迁移,都需要遵循以下步骤。首先创建一个迁移插件的实例,将迁移的id输入Drupal插件管理器:迁移= \ Drupal:美元:服务(“plugin.manager.migration”)——>调用createInstance ($ migration_id);

接下来,检查迁移的状态。通常,如果出现错误,迁移将挂起在“导入”状态。运行状态为“导入”的迁移将导致错误。为了解决这个问题,检查状态,如果有必要,将其重置为空闲:

//重置迁移状态。如果($migration->getStatus() !== MigrationInterface::STATUS_IDLE) {$migration->setStatus(MigrationInterface::STATUS_IDLE);}

在这一点上有几个选择。您可以保持迁移的原样,并运行直接导入,其中已经迁移的内容将保持不变,并且将导入任何新内容。或设置" update "标志,以便导入新内容,并更新现有内容,以匹配源:迁移- > getIdMap()——> prepareUpdate ();

此外,你可以设置“同步”标志来删除源数据库中不再存在的任何迁移内容(例如一个被取消的事件)。注意,这个选项至少需要migrate_tools版本5。

迁移- >设置(“同步”,真正的);

最后,创建MigrationExecutable插件并运行迁移:

$executable = new MigrateExecutable($migration, new MigrateMessage());状态=美元可执行- >导入();

“status”变量指示迁移是否遇到任何错误。如果状态为,然后出现错误,我们可以发送报告并进行自定义调整,以帮助迁移优雅地失败。否则迁移就会顺利进行。


一旦cron钩子准备好了,转到Ultimate cron作业页面(/admin/config/system/cron/jobs),并单击“发现作业”按钮。您的自定义cron作业将显示在表中,您可以单击“编辑”按钮来微调确切的时间。对于更新或同步数百个实体的迁移,如果手动为自定义cron作业点击“运行”按钮,页面可能会超时。然而,终极cron版本2。添加drush命令cron-list和cron-run。使用cron-list查找您的cron作业id。然后使用带有id和"——force "标志的cron run手动运行您的cron作业进行测试。


设置Migrate Cron Scheduler或Migrate Cron模块路由要快得多,对于需要在小时内运行的快速、简单的迁移来说,它是更好的选择。然而,对于更大、更复杂的迁移,在迁移之前或之后需要额外的代码,或者需要在半夜运行,Ultimate Cron模块结合自定义Cron作业提供了最大的自定义和灵活性。

Baidu