Eine Änderung bereitstellen
Diese Seite richtet sich an Ingenieure, die Änderungen an eine laufende Website ausliefern. Exponential hält Code in mehr als einer Laufzeitumgebung (PHP-FPM mit OPcache, die persistenten Worker von Velocity) und gerenderte Ausgaben in mehreren Caches; eine Bereitstellung, die die richtigen Schritte in der falschen Reihenfolge ausführt, sieht aus, als hätte sie nicht gewirkt. Der Standard ist Kompatibilität, Releases und Bereitstellung; der Befehl ist unter Eine PHP-Änderung bereitstellen beschrieben.
Inhalt
- Ein Befehl
- Die Schritte und ihre Reihenfolge
- Welche Änderung was braucht
- Eine Installation aktualisieren
- Regeln für Code, der ausgeliefert wird
- Nach der Bereitstellung
Ein Befehl
php bin/php/console exp:velocity deploy --dry-run --allow-root-user # what it would do, and nothing else
php bin/php/console exp:velocity deploy --allow-root-user # the usual case
php bin/php/console exp:velocity deploy --kernel --allow-root-user # a kernel class was added or renamedEr gibt für jeden Schritt PASS, FAIL oder SKIP mit der Zeit aus, hält beim ersten Fehler an und endet mit Status 1, wobei
er die nicht ausgeführten Schritte auflistet. --packer leert zusätzlich die gepackten Skripte und Styles.
Die Schritte und ihre Reihenfolge
| # | Schritt | Warum hier |
|---|---|---|
| 1 | Klassenzuordnungen der Erweiterungen (ezpgenerateautoloads.php -e) | neue Klassen müssen auffindbar sein |
| 2 | Klassenzuordnungen des Kernels, nur mit --kernel | dasselbe für den Kernel |
| 3 | INI-Caches (--clear-tag=ini) | Einstellungen werden erneut gelesen |
| 4 | Caches für Templates, Template-Overrides, Übersetzungen und design_base | neue Templates und Design-Verzeichnisse werden gefunden |
| 5 | Das Engine-Archiv, wenn Velocity aus einem läuft | nur neu gebaut, wenn sich kernel/, lib/ oder autoload/ geändert hat, jede Datei zuerst geparst |
| 6 | PHP-FPM: auf die Revalidierung durch OPcache warten oder es neu laden | der neue Code läuft unter FPM |
| 7 | Velocity neu starten, wenn es läuft | Worker erben die Klassen des Vorwärmens |
| 8 | Caches für Inhalte, HTTP und Template-Blöcke | gerenderte Ausgaben werden erst jetzt geleert |
| 9 | Der Antwort-Cache von Velocity | dasselbe, im Server |
| 10 | Vorwärm-URLs ([DeploySettings] WarmUpURL[]) | der erste Besucher baut nicht jeden Cache neu auf |
Die Reihenfolge ist der Punkt. Wird vor Schritt 6 und 7 geleert, wird jede in der Zwischenzeit angeforderte Seite vom alten Code gerendert und erneut zwischengespeichert. Eine Datei, die sich nicht parsen lässt, lässt Schritt 5 fehlschlagen, bevor PHP-FPM oder Velocity berührt werden.
PHP-FPM wird nur neu geladen, wenn es sein muss ([DeploySettings] PhpFpmReload=auto): Ein Neuladen lässt jeden Pool
dieser PHP-Version auf seine am längsten laufende Anfrage warten. Revalidiert OPcache Dateien, wartet die Bereitstellung
stattdessen revalidate_freq plus eine Sekunde. Nennen Sie auf einem Server mit mehreren PHP-Versionen in
[DeploySettings] PhpFpmService den Dienst, der die Website tatsächlich bedient.
Welche Änderung was braucht
| Änderung | Braucht |
|---|---|
| Eine PHP-Klasse, ein Operator oder eine INI-Datei | die ganze Bereitstellung |
| Eine neue oder umbenannte Kernel-Klasse | die Bereitstellung mit --kernel |
| Ein vorhandenes Template | die Template-Caches und den Antwort-Cache von Velocity; keinen Neustart |
| Ein Stylesheet oder Skript eines Designs | die Bereitstellung mit --packer oder die Caches für Packer und Template-Blöcke |
| Inhalte | nichts; der Kernel invalidiert |
| Eine neu aktivierte Erweiterung | die Bereitstellung: ihre Klassen, Einstellungen und Design-Verzeichnisse (design_base) |
Eine Installation aktualisieren
- Sichern Sie Dateien und Datenbank.
- Bringen Sie den neuen Code an seinen Platz, erzeugen Sie die Klassenzuordnungen neu, leeren Sie alle Caches, laden Sie PHP-FPM neu, starten Sie Velocity neu.
- Wenden Sie die Datenbankaktualisierung einmal, vollständig, der Reihe nach an (
update/database/<driver>/6.0/), dann die Skripte, die die Anleitung nennt. - Lesen Sie die Upgrade-Hinweise jedes durchlaufenen Zeitraums in
doc/eng-us/bc/6.0/und die Changelogs. - Prüfen Sie Erweiterungen:
./console exp:checkclassesmeldet Klassen, die PHP nicht laden will. - Führen Sie die Upgrade-Prüfung aus: Setup > System Upgrade oder
php bin/php/checkmanifest.php --all --extensions.
Anleitungen: Aktualisieren, Mit Git aktualisieren.
Regeln für Code, der ausgeliefert wird
- Eine neue Klasse, auf die eine mitgelieferte INI-Datei verweist, sollte im Kernel mit
class_exists()abgesichert werden: Ein Velocity-Worker, der vor der Bereitstellung gestartet wurde, kennt sie nicht. - Templates, die eine neue Klasse oder einen neuen Operator verwenden, dürfen die Server nicht vor der Klasse erreichen; stellen Sie zuerst die Kernel-Seite bereit.
- Eine Bereitstellung muss jede PHP-Laufzeitumgebung erreichen, die die Website bedient; nur Caches zu leeren lässt PHP-FPM und Velocity bei den alten Klassen.
- Stellen Sie bei mehreren Webknoten jeden Knoten bereit;
exp:velocity deploydeckt einen Rechner ab. - Erwägen Sie in der Produktion
ManagedByDeployment=enabled, damit die Administration keine Einstellungen oder Templates schreiben kann, die die nächste Bereitstellung verwerfen würde (Konfiguration, die die Bereitstellung verwaltet).
Nach der Bereitstellung
- Rufen Sie die Startseite und die Anmeldung der Administration auf; prüfen Sie eine Seite, deren Inhalt Sie kennen.
- Beobachten Sie
error.logim Log-Viewer einige Minuten lang. - Prüfen Sie nach einem Neustart von Velocity, dass ein neuer Elternprozess läuft und der Port antwortet (Persistente Worker von Velocity).
Verwandte Seiten
- Bereitstellen
- Bereitstellungs-Pipeline
- Änderungen bereitstellen, für Hoster
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.