TYPO3 10 Solr调度器baseVariants域名配置问询:自动运行时域名不符问题
解决TYPO3 10中Solr Index Queue Worker自动运行时baseVariant域名错误的问题
我之前碰到过几乎一模一样的场景,手动跑Scheduler任务完全正常,但自动执行就会跳去主域名——核心原因是CLI环境下TYPO3不会自动识别你指定的baseVariant/站点上下文,而手动操作时是在当前站点的后端会话里,自然能匹配正确的配置。下面是一步步的解决办法:
1. 给Scheduler任务绑定明确的站点
打开TYPO3后端的「Scheduler」模块,找到你的「Index Queue Worker (solr)」任务:
- 编辑任务时,找到「Site」选项(TYPO3 10的Solr扩展已经支持这个配置项)
- 选择
testing.mydomain.nl对应的站点并保存。这样自动运行时,任务会强制加载该站点的所有配置,包括对应的baseVariant域名。
2. 给CLI命令指定站点参数
如果你的Scheduler是通过cron调用CLI命令执行的(比如typo3 scheduler:run),可以直接在命令里明确指定站点:
./vendor/bin/typo3 scheduler:run --site=testing.mydomain.nl
也可以用站点ID替代域名标识符:
./vendor/bin/typo3 scheduler:run --site=2
通过这个参数,CLI运行时会精准加载目标站点的配置,不会再默认用主站点的域名。
3. 强制CLI环境下的Solr站点配置(额外保险)
如果上面的方法还没解决问题,可以在AdditionalConfiguration.php里针对CLI环境强制指定站点的baseVariant:
if (TYPO3_MODE === 'CLI') { // 检测当前是否在运行Solr的索引队列任务 $argv = $_SERVER['argv'] ?? []; $isSolrWorkerTask = in_array('scheduler:run', $argv) || in_array('solr:indexqueue:worker', $argv); if ($isSolrWorkerTask) { // 强制设置testing站点的base地址 $GLOBALS['TYPO3_CONF_VARS']['SYS']['sites']['testing.mydomain.nl']['base'] = 'https://testing.mydomain.nl/'; // 同步你在站点配置里的baseVariant规则 $GLOBALS['TYPO3_CONF_VARS']['SYS']['sites']['testing.mydomain.nl']['baseVariants'] = [ 'production' => [ 'base' => 'https://www.mydomain.nl/', ], 'testing' => [ 'base' => 'https://testing.mydomain.nl/', 'condition' => 'applicationContext matches /Testing/', ], ]; } }
记得把代码里的站点标识符和base配置替换成你实际的内容。
4. 确认TYPO3_CONTEXT环境变量
如果你的测试环境使用了TYPO3_CONTEXT=Testing,一定要确保cron运行时也加载这个变量。比如把cron命令改成:
TYPO3_CONTEXT=Testing ./vendor/bin/typo3 scheduler:run
这样TYPO3会自动匹配对应上下文的baseVariant规则,不会再混用主站点的配置。
最后验证:修改完成后手动触发一次cron命令,再去/var/log下查看Solr日志,确认域名已经切换为testing.mydomain.nl即可。
内容的提问来源于stack exchange,提问作者Jacco van der Post
相关产品推荐
相关产品推荐

