Search code examples
typo3typo3-7.6.xtypo3-8.x

TYPO3 Upgrade Wizard Fails on DatabaseRowsUpdateWizard


I updated a project from TYPO3 7.6 to ^8 by following the official guide. The latest step was the composer update. I removed extensions/packages not compatible with ^8 and updated the ones available for ^8. I'm able to reach the install tool, the TYPO3 admin backend, and the frontend (with errors).

So I ended up at the step where I should use the upgrade wizards provided by the install tool. I completed a few wizards without any issues but then faced a pretty one - first, I tried to run DatabaseRowsUpdateWizard within the install tool but that failed with a memory error - I tried the cli approach with

php -d memory_limit=-1 vendor/bin/typo3cms upgrade:wizard DatabaseRowsUpdateWizard

the processing worked but it ended up with following error:

[ Helhum\Typo3Console\Mvc\Cli\FailedSubProcessCommandException ]


#1485130941: Executing command "upgrade:subprocess" failed (exit code: "1")
 thrown in file vendor/helhum/typo3-console/Classes/Install/Upgrade/UpgradeHandling.php
 in line 284

the command initially failed is:

'/usr/bin/php7.2' 'vendor/bin/typo3cms' 'upgrade:subprocess' '--command' 'executeWizard' '--arguments' 'a:3:{i:0;s:24:"DatabaseRowsUpdateWizard";i:1;a:0:{}i:2;b:0;}'

and here is the subprocess exception:

[ Sub-process exception: TYPO3\CMS\Core\Resource\Exception\InvalidPathException ]


#1320286857: File ../disclaimer_de.html is not valid (".." and "//" is not allowed in path).
 thrown in file typo3/sysext/core/Classes/Resource/Driver/AbstractHierarchicalFilesystemDriver.php
 in line 71

I'm pretty much lost and don't know where to start to get this fixed - help is much appreciated.


Solution

  • Issues like these usually stem from broken URLs in RTE fields as can be seen in the error output:

    File ../disclaimer_de.html is not valid (".." and "//" is not allowed in path)

    In this case you should manually prepare the database and run SQL statements which replace the broken/obsolete ../ prefix from all affected records. An example query:

    UPDATE tt_content
    SET bodytext = REPLACE(bodytext, 'href="../', 'href="')
    WHERE bodytext LIKE '%href="../';
    

    Notice that this query is very basic and can destroy your data, so make sure you run some SELECT statements first to make sure nothing breaks. Also keep a backup of your database at hand.

    Sometime, custom or TER extension also have RTE such as tt_news where you might come across same issue. To fix that, you just need to run the same query with the according table.