从 TYPO3 9 升级到 10 - 未启用扩展的升级向导中出现致命错误

Upgrade from TYPO3 9 to 10 - Fatal Error in Upgrade Wizard with no extensions enabled

我刚刚将我的 TYPO3 v9 升级到 v10.04.27,现在我在升级向导中遇到错误

(1/1) 错误 Class 'TYPO3\CMS\Core\Cache\Frontend\StringFrontend' 未在 /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Cache/CacheManager.php 行 351

中找到

正如您在路径中看到的那样,我也已经尝试使用较旧的 TYPO3 10 版本。

我在升级前禁用了所有扩展。除了那些不能被禁用的。

所以这应该是一个完全干净的 TYPO3 10 安装(配置文件除外)。

我不知道我能做些什么。

这是完整的跟踪:

Something went wrong. Please use Check for broken extensions to see if a loaded extension breaks this part of the install tool and unload it.

The box below may additionally reveal further details on what went wrong depending on your debug settings. It may help to temporarily switch to debug mode using Settings > Configuration Presets > Debug settings.

If this error happens at an early state and no full exception back trace is shown, it may also help to manually increase debugging output in typo3conf/LocalConfiguration.php:['BE']['debug'] => true, ['SYS']['devIPmask'] => '*', ['SYS']['displayErrors'] => 1,['SYS']['exceptionalErrors'] => 12290

Ajax error
Whoops, looks like something went wrong.
(1/1) Error
Class 'TYPO3\CMS\Core\Cache\Frontend\StringFrontend' not found

in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Cache/CacheManager.php line 351
            $backendInstance->initializeObject();
        }

        // New used on purpose, see comment above
        $frontendInstance = new $frontend($identifier, $backendInstance);
        if (!$frontendInstance instanceof FrontendInterface) {
            throw new InvalidCacheException('"' . $frontend . '" is not a valid cache frontend object.', 1464550984);
        }
        if (is_callable([$frontendInstance, 'initializeObject'])) {
at TYPO3\CMS\Core\Cache\CacheManager->createCache()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Cache/CacheManager.php line 157
        if ($this->hasCache($identifier) === false) {
            throw new NoSuchCacheException('A cache with identifier "' . $identifier . '" does not exist.', 1203699034);
        }
        if (!isset($this->caches[$identifier])) {
            $this->createCache($identifier);
        }
        return $this->caches[$identifier];
    }

at TYPO3\CMS\Core\Cache\CacheManager->getCache()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Cache/DatabaseSchemaService.php line 51
        $cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);

        $tableDefinitions = '';
        foreach ($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] as $cacheName => $_) {
            $backend = $cacheManager->getCache($cacheName)->getBackend();
            if (method_exists($backend, 'getTableDefinitions')) {
                $tableDefinitions .= LF . $backend->getTableDefinitions();
            }
        }
at TYPO3\CMS\Core\Cache\DatabaseSchemaService->getCachingFrameworkRequiredDatabaseSchema()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Cache/DatabaseSchemaService.php line 33
     * @param AlterTableDefinitionStatementsEvent $event
     */
    public function addCachingFrameworkDatabaseSchema(AlterTableDefinitionStatementsEvent $event): void
    {
        $event->addSqlData($this->getCachingFrameworkRequiredDatabaseSchema());
    }

    /**
     * Get schema SQL of required cache framework tables.
at TYPO3\CMS\Core\Cache\DatabaseSchemaService->addCachingFrameworkDatabaseSchema()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/EventDispatcher/EventDispatcher.php line 51
        if ($event instanceof StoppableEventInterface && $event->isPropagationStopped()) {
            return $event;
        }
        foreach ($this->listenerProvider->getListenersForEvent($event) as $listener) {
            $listener($event);
            if ($event instanceof StoppableEventInterface && $event->isPropagationStopped()) {
                break;
            }
        }
at TYPO3\CMS\Core\EventDispatcher\EventDispatcher->dispatch()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Database/Schema/SqlReader.php line 75
            }
        }

        /** @var AlterTableDefinitionStatementsEvent $event */
        $event = $this->eventDispatcher->dispatch(new AlterTableDefinitionStatementsEvent($sqlString));
        $sqlString = $event->getSqlData();

        return implode(LF . LF, $sqlString);
    }
at TYPO3\CMS\Core\Database\Schema\SqlReader->getTablesDefinitionString()
in /srv/typo3_src-10.4.20/typo3/sysext/install/Classes/Service/UpgradeWizardsService.php line 156
     */
    public function getBlockingDatabaseAdds(): array
    {
        $sqlReader = GeneralUtility::makeInstance(SqlReader::class);
        $databaseDefinitions = $sqlReader->getCreateTableStatementArray($sqlReader->getTablesDefinitionString());

        $schemaMigrator = GeneralUtility::makeInstance(SchemaMigrator::class);
        $databaseDifferences = $schemaMigrator->getSchemaDiffs($databaseDefinitions);

at TYPO3\CMS\Install\Service\UpgradeWizardsService->getBlockingDatabaseAdds()
in /srv/typo3_src-10.4.20/typo3/sysext/install/Classes/Controller/UpgradeController.php line 1042
        $this->lateBootService->loadExtLocalconfDatabaseAndExtTables(false);
        $adds = [];
        $needsUpdate = false;
        try {
            $adds = $this->upgradeWizardsService->getBlockingDatabaseAdds();
            $this->lateBootService->resetGlobalContainer();
            if (!empty($adds)) {
                $needsUpdate = true;
            }
at TYPO3\CMS\Install\Controller\UpgradeController->upgradeWizardsBlockingDatabaseAddsAction()
in /srv/typo3_src-10.4.20/typo3/sysext/install/Classes/Middleware/Maintenance.php line 246
                    'Unknown action method ' . $action . ' in controller ' . $controllerName,
                    1505216027
                );
            }
            $response = $controller->$action($request);
        }

        return $response;
    }
at TYPO3\CMS\Install\Middleware\Maintenance->process()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 121
            }

            public function handle(ServerRequestInterface $request): ResponseInterface
            {
                return $this->middleware->process($request, $this->next);
            }
        };
    }

at class@anonymous/srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php:103$bc->handle()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Middleware/NormalizedParamsAttribute.php line 45
     */
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $request = $request->withAttribute('normalizedParams', NormalizedParams::createFromRequest($request));
        return $handler->handle($request);
    }
}
at TYPO3\CMS\Core\Middleware\NormalizedParamsAttribute->process()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 172

                if (!$middleware instanceof MiddlewareInterface) {
                    throw new \InvalidArgumentException(get_class($middleware) . ' does not implement ' . MiddlewareInterface::class, 1516821342);
                }
                return $middleware->process($request, $this->next);
            }
        };
    }
}
at class@anonymous/srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php:138$bd->handle()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php line 78
     * @return ResponseInterface
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        return $this->tip->handle($request);
    }

    /**
     * Seed the middleware stack with the inner request handler
at TYPO3\CMS\Core\Http\MiddlewareDispatcher->handle()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/AbstractApplication.php line 85
     * @return ResponseInterface
     */
    protected function handle(ServerRequestInterface $request): ResponseInterface
    {
        return $this->requestHandler->handle($request);
    }

    /**
     * Set up the application and shut it down afterwards
at TYPO3\CMS\Core\Http\AbstractApplication->handle()
in /srv/typo3_src-10.4.20/typo3/sysext/install/Classes/Http/Application.php line 52
    protected function handle(ServerRequestInterface $request): ResponseInterface
    {
        $this->initializeContext();
        $request = $request->withAttribute('applicationType', SystemEnvironmentBuilder::REQUESTTYPE_INSTALL);
        return parent::handle($request)
            ->withHeader('X-Frame-Options', 'SAMEORIGIN');
    }

    /**
at TYPO3\CMS\Install\Http\Application->handle()
in /srv/typo3_src-10.4.20/typo3/sysext/core/Classes/Http/AbstractApplication.php line 97
    final public function run(callable $execute = null)
    {
        try {
            $response = $this->handle(
                ServerRequestFactory::fromGlobals()
            );
            if ($execute !== null) {
                call_user_func($execute);
            }
at TYPO3\CMS\Core\Http\AbstractApplication->run()
in /srv/typo3_src-10.4.20/typo3/install.php line 105

call_user_func(function () {
    $classLoader = require dirname(__DIR__).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_INSTALL);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader, true)->get(\TYPO3\CMS\Install\Http\Application::class)->run();
});
at {closure}()
in /srv/typo3_src-10.4.20/typo3/install.php line 106
call_user_func(function () {
    $classLoader = require dirname(__DIR__).'/vendor/autoload.php';
    \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::run(1, \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_INSTALL);
    \TYPO3\CMS\Core\Core\Bootstrap::init($classLoader, true)->get(\TYPO3\CMS\Install\Http\Application::class)->run();
});

有什么想法吗?

提前致谢

我的猜测是您在某处使用了 StringFrontend,它已被弃用 in TYPO3 9.2

如果您在任何地方找到“StringFrontend”并用 VariableFrontend 替换它或完全删除它,您能否检查您的 LocalConfiguration.phpAdditionalConfiguration.php? (如迁移路径中所建议)

删除除TYPO3核心之外的所有扩展。然后缓存将在不需要的情况下重建 类.

如果扩展只被停用而没有被删除,我的安装出现了一些错误。