Contao 3.5 inkl installierte Erweiterungen auf Contao 4.3.x updaten
Anforderung:
Eine bestehende umfangreiche Contao 3.5.x-Website mit installierten Erweiterungen auf Contao 4.3 zu updaten?
Aktueller Status:
Update einer großen C3.5 Website auf 4.3.x weitgehend erfolgreich durchgeführt :)
Hier meine bisherigen Schritte:
- Die C35-Website läuft auf dem Webspace im Ordner /website-c3/ und wurde auf den aktuellsten 3.5.x Stand gebracht. Alle installierten Erweiterungen sind auch ganz aktuell.
- Datenbank in eine zweite Datenbank kopiert, damit ich im Laufe des 4.3-Updates auf diese zweite Datenbank verbinden kann (ohne die bisherige Datenbank zu versauen).
- Einen neuen Unterordner /website-c4/ angelegt (als Root für die neue Version) und die frischen Daten der 4.3.x dorthin kopiert. Zuvor habe ich in den C4-Daten die composer.json, wie im dort vorgeschlagenen Eintrag von Xtra beschrieben, bearbeitet um das aktuelle SSymfony-Problem zu vermeiden.
- Die PHP-Version auf 7.1 umgestellt. (muss mal bei Zeiten schauen, ob PHP 7.1 FPM ok ist, oder ich besser 7.1 CGI nutzen sollte. Ersteres erscheint mir sinnvoller.)
- Über SSH Composer in /website-c4/ aktiviert.
- Domain auf /website-c4/web/ umgestellt.
- Aus der C3.5 die Inhalte von /website-c3/templates/ in die C4 nach /website-c4/templates/ kopiert.
- Aus der C3.5 die Inhalte von /website-c3/files/ in die C4 nach /website-c4/files/ kopiert.
- Aus der C3.5 die localconfig.php (nur die wichtigsten Angaben drin gelassen, alles was über Install sowieso läuft oder mir zu C3-spezifisch erscheint, habe ich auskommentiert; Hier sind Infos zur localconfig unter C4), langconfig.php und dcaconfig.php in die C4 nach /website-c4/system/config/ kopiert.
- Aus der C3.5 die Drittanbieter-Extensions von /website-c3/system/modules/ in die C4 nach /website-c4/system/modules/ kopiert. Alle Core-Extensions und nicht zwingend notwendige Drittanbieter-Extensions habe ich weggelassen um etwaige Fehlerquellen an der Stelle auszuschließen. Wenn später hoffentlich alles läuft, kann ich sie immer noch nachinstallieren (z.B. easy_themes, backupDB und Co).
- Die C4-Installation über domain.tld/install.php aufgerufen, Install-Passwort vergeben und die Datenbankdaten der kopierten C3-Datenbank eingegeben. Danach die geforderten Updates der Datenbankfelder durchgeführt.
- Optional: Ich habe mit der Anleitung dafür gesorgt, dass C4 nicht automatisch /de/ in der URL ergänzt, da sich die URLs der Domain durch den Contao-Versions-Wechsel nicht ändern sollen, also: in der C4 Managed Edition in die /app/config/parameters.yml (steht erst nach der C4-Installation zur Verfügung) den Aufruf prepend_locale: false einfügen. Danach zum Löschen des Prod-Caches entweder per SSH vendor/bin/contao-console cache:clear -e=prod ausführen oder manuell den Ordner /var/cache/prod samt Inhalt löschen. Außerdem muss man unbedingt den Browser-Cache leeren und den Browser danach neu starten. Firefox war da super hartnäckig und wollte ständig weiter das /de/ anhängen, was natürlich dann zu Fehlermeldungen führte. Mit Browser-Cache leeren, alles zumachen, warten und wieder reingehen, klappte es dann endlich (vorübergehend rief ich die Seite zum Testen unter einem ganz anderen Browser auf, der nicht so zickte).
- Danach habe ich mich in C4 eingeloggt und in der Systemwartung alles bereinigt.
- Im Templates-Ordner waren von C3 noch modifizierte Backend-Templates. Diese habe ich entfernt, da sie sonst mit dem neuen C4-Backend Ärger machten (und sowieso nicht mehr nötig waren).
- Im Templates-Ordner habe ich zudem die modifizierte fe_page mit dem neuen Original von C4 verglichen und an den nötigen Stellen aktualisiert.
- Ich habe in der Website noch viele weitere modifizierte Templates. Diese muss ich noch nach und nach abgleichen und auch auf den C4-Stand bringen.
- In der Dateiverwaltung muss ich die Ordner bearbeiten und bewusst aktiv schalten, da ihre Inhalte sonst nicht für die Öffentlichkeit auf der Website erreichbar sind. Das ist also genau umgekehrt zu C3, wo man damals einzelne Ordner sichern musste um sie von der Öffentlichkeit fernzuhalten. Nun sind alle standardmäßig gesichert und man muss sie erst freischalten. Unterordner werden dann automatisch mit freigeschaltet.
- Optional: Ich möchte, dass aus der htaccess im Root der C3-Installation wichtige Angaben auch für C4 übernommen werden. Sie werden nun nicht mehr standardmäßig mit ausgeliefert, da Contao auch unter Nicht-Apache-Umgebungen läuft. Der Admin ist da also jetzt selbst in der Pflicht. Entsprechend ergänze ich die .htaccess in /website-c4/web/. Weiter unten habe ich ein Beispiel für meine modifizierte .htaccess gepostet.
- Optional: Hier die Info, wie das mit SMTP und E-Mail-Versand unter Contao 4 läuft.
Soweit sieht es schon passabler aus. Ich musste eine alte Erweiterung vorübergehend entfernen, da sie einen Hook nutzt, der jetzt so anscheinend nicht mehr existiert.
Später werde ich - nach einem Zwischen-Backup - mal testen, ob ich einige der C3-Erweiterungen durch frische Composer-Erweiterungen ersetzen kann.
Liste der Anhänge anzeigen (Anzahl: 1)
...bin völlig ratlos.
TABELLEN löschen funktioniert nicht.
Habe dann eine neue Installation gemacht und die DB importiert, bevor ich das Install-Tool ausgeführt habe.
DB Import erfolgreich, jedoch bricht das Install-Tool ab und gibt eine Fehlermeldung aus (vgl. Screenshot).
Anhang 20736
Im Log steht folgendes:
Code:
[2018-04-04 01:32:28] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"tl_files/brenden/mobotix/aktuell.jpg","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/tl_files/brenden/mobotix/aktuell.jpg","method":"GET"} []
[2018-04-04 01:32:28] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 01:32:28] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/tl_files/brenden/mobotix/aktuell.jpg" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/tl_files/brend...ix/aktuell.jpg at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/tl_files/brend...ix/aktuell.jpg at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 01:50:06] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://www.metzler.biz/robots.txt","method":"GET"} []
[2018-04-04 01:50:06] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 01:50:06] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.metzler.biz/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.metzler.biz/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.metzler.biz/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 02:24:38] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/robots.txt","method":"GET"} []
[2018-04-04 02:24:38] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 02:24:38] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 02:30:32] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/robots.txt","method":"GET"} []
[2018-04-04 02:30:32] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 02:30:33] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 02:30:36] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"web/","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/web/","method":"GET"} []
[2018-04-04 02:30:36] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 02:30:36] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/web/" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/web/ at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/web/ at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 03:12:01] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"abauserimage/nd/mobotix/aktuell.jpg","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/abauserimage/nd/mobotix/aktuell.jpg?name=nd%2Fhtml%2F..%2Fmobotix%2Fakt&s=78","method":"GET"} []
[2018-04-04 03:12:01] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 03:12:01] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/abauserimage/nd/mobotix/aktuell.jpg?s=78&name=nd/html/../mobotix/akt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/abauserimage/n...../mobotix/akt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/abauserimage/n...../mobotix/akt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 03:17:52] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://brenden.ch/robots.txt","method":"GET"} []
[2018-04-04 03:17:52] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 03:17:53] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://brenden.ch/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 04:11:05] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://www.brenden.ch/robots.txt","method":"GET"} []
[2018-04-04 04:11:05] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 04:11:05] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://www.brenden.ch/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://www.brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 04:56:27] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://brenden.ch/robots.txt","method":"GET"} []
[2018-04-04 04:56:27] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 04:56:27] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://brenden.ch/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://brenden.ch/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 05:02:57] request.INFO: Matched route "contao_catch_all". {"route":"contao_catch_all","route_parameters":{"_scope":"frontend","_token_check":true,"_controller":"Contao\\CoreBundle\\Controller\\FrontendController::indexAction","_url_fragment":"robots.txt","_route":"contao_catch_all"},"request_uri":"http://metzler.biz/robots.txt","method":"GET"} []
[2018-04-04 05:02:57] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2018-04-04 05:02:57] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Page not found: http://metzler.biz/robots.txt" at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 109 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Page not found: http://metzler.biz/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:109, Contao\\CoreBundle\\Exception\\PageNotFoundException(code: 0): Page not found: http://metzler.biz/robots.txt at /home/brenden/public_html/vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:66)"} []
[2018-04-04 06:26:51] request.INFO: Matched route "contao_install". {"route":"contao_install","route_parameters":{"_scope":"backend","_token_check":true,"_controller":"Contao\\InstallationBundle\\Controller\\InstallationController::installAction","_route":"contao_install"},"request_uri":"http://www.brenden.ch/contao/install","method":"POST"} []
[2018-04-04 06:26:57] app.CRITICAL: An exception occurred. {"exception":"[object] (Doctrine\\DBAL\\Exception\\DriverException(code: 0): An exception occurred while executing 'ALTER TABLE tl_article CHANGE id id INT UNSIGNED AUTO_INCREMENT NOT NULL':\n\nSQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:121, Doctrine\\DBAL\\Driver\\PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:106, PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:104)"} []
[2018-04-04 06:34:31] request.INFO: Matched route "contao_install". {"route":"contao_install","route_parameters":{"_scope":"backend","_token_check":true,"_controller":"Contao\\InstallationBundle\\Controller\\InstallationController::installAction","_route":"contao_install"},"request_uri":"http://www.brenden.ch/contao/install","method":"POST"} []
[2018-04-04 06:34:31] app.CRITICAL: An exception occurred. {"exception":"[object] (Doctrine\\DBAL\\Exception\\DriverException(code: 0): An exception occurred while executing 'ALTER TABLE tl_article CHANGE id id INT UNSIGNED AUTO_INCREMENT NOT NULL':\n\nSQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:121, Doctrine\\DBAL\\Driver\\PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:106, PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key at /home/brenden/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:104)"} []