Installation Contao 4 und Migration Contao 3 bei Domainfactory: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Debugmodus)
(Cache löschen)
Zeile 79: Zeile 79:
 
php vendor/bin/contao-console cache:clear --env=dev --no-debug
 
php vendor/bin/contao-console cache:clear --env=dev --no-debug
 
</source>
 
</source>
Welcher Befhel der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.
+
Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.
  
 
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.
 
Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.

Version vom 22. Oktober 2017, 19:45 Uhr

MsgError.png Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.

Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis.

Migration einer umfangreichen Contao-3.5-Installation zu Contao 4.4

Umziehen soll die sehr umfangreiche Installation des Deutschen Schachbundes mit mehreren Subdomains. Ausgangspunkt ist Contao 3.5 mit PHP 5.6. Ziel ist Contao 4.4 mit PHP 7.1, alles auf einem ManagedServer bei Domainfactory.

Datenbestand

Die Datenbank enthält über 8 Millionen Datensätze, darunter Daten von zahlreichen selbstprogrammierten Erweiterungen, die alle noch nicht mit C4 getestet wurden. Die Multidomaininstallation umfaßt 5 Subdomains mit über 1.600 Seiten und über 13.000 Nachrichten, um nur einige Eckdaten zu nennen. Die Datenbank ist insgesamt etwa 1,6 GB groß.

Systemvoraussetzungen für Contao 4

Standardmäßig funktioniert die Installation von C4 bei Domainfactory nicht, egal in welchem Tarif man sich befindet. Benutzer mit Shell- und php.ini-Zugriff können ihren Webspace allerdings auf so eine Installation vorbereiten. Dazu gehören:

  • Aktivierung der intl-Erweiterung durch Benutzung von PHP Extended. PHP in der Standardedition ist unbrauchbar für C4. Die intl-Erweiterung wird von Symfony benötigt, ohne das Contao nicht läuft.
  • Umstellung der Konsole von PHP 4.4.9 auf mindestens PHP 5.6. Das ist nötig um Composer ausführen zu können.
  • Erhöhung von memory_limit in der php.ini auf einen Wert von mindestens 1,5 bis 2 GB. Das ist nötig um Composer ausführen zu können.

Vorbereitung Webspace

Es mußte ein leeres Verzeichnis, z.B. webseiten/contao4 angelegt werden und darin ein Verzeichnis web. Auf das Verzeichnis webseiten/contao4/web mußte eine (Sub-)Domain geroutet werden. Per FTP kann danach in das Verzeichnis webseiten/contao4/web die Datei contao-manager.phar hochgeladen werden. Um diese aufrufen zu können, muß die Endung php an diese Datei angehangen werden.

Vorbereitung Datenbank

Ein Backup der Datenbank über phpMyAdmin ist aufgrund der Größe unmöglich. Mit dem MySQLDumper ist es zwar machbar, mir aber zuletzt nicht gelungen. Mittendrin bot mir der Browser die aufgerufene PHP-Datei zum Download an. Offensichtlich hatte sich der Server bei der Interpretierung von PHP-Dateien vertan. Über die Shell hat es schließlich geklappt:

Export einer MySQL-Datenbank:

mysqldump [Datenbankname] -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 > [Datei]

Import einer MySQL-Datenbank:

mysql -u[Datenbank-Benutzer] -p[Datenbank-Passwort] --default-character-set=utf8 [Datenbankname] < [Datei]

Wichtig dabei ist die Angabe des Zeichensatzes! Sonst hat man statt Umlauten nur Hieroglyphen auf der Seite.

Installation

Mit http://domain/contao-manager.phar.php kann nun die Installation gestartet werden. Der Contao-Manager (CM) stürzt beim ersten Mal immer mit einer Fehlermeldung ab. Nach einem Refresh läuft er aber fortan sauber durch und auch die Installation läuft sauber durch.

Nach der Installation durch den CM muß C4 nun noch mit dem Installtool fertiggestellt werden. Das wird direkt aus dem CM oder mit http://domain/contao/install aufgerufen. Zuvor sollte die C3-Datenbank in die C4-Datenbank importiert worden sein.

Kopieren von fehlenden Dateien

Der Inhalt des files-Ordners aus C3 muß nach webseiten/contao4/files kopiert werden. In zeitlich vertretbaren Rahmen und wenn man das Dateidatum behalten möchte ist das nur über die Shell möglich. Hier gebe ich "mc" ein, was den Midnight Commander startet. Mit dem habe ich nun die rund 44 GB Daten aus files kopiert, was auch so 2-3 Stunden dauerte.

Das Kopieren des templates-Ordners nach webseiten/contao4/templates dauerte ähnlich lange. Das lag daran, weil ich dort den Cache ines externen PHP-Skriptes gespeichert habe, wo sich mehrere 10.000 Dateien in kurzer Zeit ansammeln.

Auf das Kopieren von system/modules nach webseiten/contao4/system/modules habe ich vorerst verzichtet. Hier ist es wahrscheinlich besser nach Erweiterungsversionen für C4 zu suchen und diese über den CM zu installieren.

Migration

Auf das Kopieren der Dateien aus system/modules hatte ich vorerst verzichtet. Stattdessen nutze ich den Debugmodus (app_dev.php) und arbeite dort die schweren Fehler ab. Erweiterungen, wo es C4-Versionen gibt, stalliere ich über die Shell. Wo es nicht klappt - bei simple_columns kommt vom Composer eine Fehlermeldung, weil die Version nicht paßt - kopiere ich aus system/modules die Erweiterung.

Da ich auch im assets-Ordner mehrere eigene Dateien gespeichert habe, kopierte ich auch diese in den assets-Ordner von C4.

Fehlermeldung: Fatal error: Cannot use 'String' as class name as it is reserved ...

Alle Erweiterungen und ggfs. auch die Templates sollten auf das Benutzen der String-Klasse von Contao überprüft werden. Die Aufrufe der String-Klasse müssen durch StringUtil ersetzt werden.

Debugmodus

Im Gegensatz zu C3 läßt sich der Debugmodus nicht mehr im Backend aktivieren. In C4 wird der Debugmodus über die app_dev.php aufgerufen. Glen Langer (BugBuster) hat dazu eine kleine Anleitung online gestellt, da der Zugang zu app_dev.php geschützt ist. Der dort angegebene Befehl

php vendor/bin/contao-console contao:install-web-dir --user=USER --password=PASSWORD

muß im Root der Contao-Installation ausgeführt werden!

Cache löschen

In C3 mußte man dazu in die System-Einstellungen gehen und den Cache deaktivieren. In C4 muß der Cache manuell geleert werden. Das geht mit verschiedenen Befehlen über die Shell:

php app/console cache:clear --env=prod --no-debug
php app/console cache:clear --env=dev --no-debug
php bin/console cache:clear --env=prod --no-debug
php vendor/bin/contao-console cache:clear --env=dev --no-debug

Welcher Befehl der richtige ist, hängt von der verwendeten Version ab: Managed Edition oder Standard Edition.

Man kann natürlich die Ordner unter var/cache per FTP o.ä. auch direkt löschen.

Installation von C4-Erweiterungen

Bei Domainfactory ist das leider nur über die Shell möglich. Der CM stürzt mit dem von ihm aufgerufenen Composer immer mit einer Zu-wenig-Arbeitsspeicher-Meldung ab. Dabei spielt es keine Rolle, was man in der php.ini zu stehen hat! Domainfactory läßt für Shellaufrufe, die von einem PHP-Skript kommen, nur einen begrenzten Arbeitsspeicher zu, den man nicht beeinflussen kann. Selbst bei einem ManagedServer nicht.

Shell-Installation

Einige Beispielaufrufe:

php contao-manager.phar.php composer require jrgregory/m17-sticky-backend-footer
php contao-manager.phar.php composer require contao-legacy/simple_columns
php contao-manager.phar.php composer update derhaeuptling/contao-mega-menu
php contao-manager.phar.php composer update contao/core-bundle
php contao-manager.phar.php composer require bugbuster/contao-banner-bundle

Bitte dabei beachten:

  • Der Aliasaufruf "php" am Anfang funktioniert nur, weil ich dieses Alias mit PHP 5.6 verknüpft habe. Standardmäßig ist "php" mit PHP 4.4.9 verknüft.
  • Der Befehl muß im web-Verzeichnis ausgeführt werden.
Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Composer meckert bei Isotope, dass er mit tablelookupwizard 3.1 nicht zurecht kommt - korrekt?
<Toflar> keine Ahnung, sowas weiss ich doch nicht auswendig :D
<user> wer dann ;)
<Toflar> na niemand, deswegen schreibt man's ja in die composer.json

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge