In app.yml gibt es keine feste globale Liste von Hook-Typen.
Hooks werden dynamisch von Pups bereitgestellt, und Sie können sich nur an die Hooks anhängen, die in den von Ihnen enthaltenen Vorlagen vorhanden sind.
Funktionsweise
Wenn Sie etwas wie folgt sehen:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
funktioniert das, weil die Vorlagen einen Schritt wie diesen enthalten:
- hook: code
run:
- exec: ...
Pups ermöglicht es Ihnen, Befehle vor oder nach einem dieser definierten Hook-Punkte anzuhängen.
Wenn eine Vorlage also hook: code definiert, können Sie before_code: oder after_code: verwenden.
Wenn sie hook: assets_precompile definiert, können Sie before_assets_precompile: oder after_assets_precompile: verwenden – und so weiter.
Wenn es kein
hook: restart(zum Beispiel) gibt, wirdafter_restart:einfach nicht ausgelöst.
Hooks, die in den Standardvorlagen bekannt sind
Aus den Standardvorlagen templates/*.yml, die mit Discourse Docker geliefert werden:
| Hook-Name | Häufige Verwendung | Funktioniert mit |
|---|---|---|
code |
Haupt-Setup-Phase für Plugin-Klone, benutzerdefinierte Dateibearbeitungen usw. | before_code: / after_code: |
assets_precompile |
Nach der Kompilierung von Rails-Assets (z. B. Upload nach S3, Bereinigung) | after_assets_precompile: |
web |
Für letzte Anpassungen, bevor der Webprozess gestartet wird | before_web: |
Sie werden oft after_code: und before_code: in Plugin-Installationsbeispielen sehen – diese sind in den meisten Setups die einzigen, die benötigt werden.
Hooks, die standardmäßig nicht existieren
Namen wie after_restart oder after_post_boot entsprechen keinem hook: innerhalb der Standardvorlagen, sodass Pups nicht weiß, wo sie angehängt werden sollen.
Sie werden nicht ausgelöst, es sei denn, Sie fügen einen passenden hook: restart-Schritt in einer benutzerdefinierten Vorlage hinzu.
So finden Sie alle auf Ihrem System verfügbaren Hooks
Führen Sie von Ihrem /var/discourse-Ordner aus Folgendes aus:
grep -R "hook:" -n templates/ samples/
Dies listet jeden Hook-Namen auf, der von den Vorlagen unterstützt wird, die Sie derzeit einschließen.
Alles, was Sie dort finden, kann als before_<name>: oder after_<name>: in Ihrem hooks:-Block verwendet werden.
Referenz
Dieses Verhalten wird kurz in der Pups README (dem Konfigurationsmanagement-Tool, das von Discourse’s Docker-Setup verwendet wird) erklärt:
„Hooks sind Punkte in Vorlagen, die es ermöglichen, Befehle vor oder nach einem Schritt einzufügen, der mit
hook:gekennzeichnet ist.“
In der Praxis
- Verwenden Sie
after_code:für die meisten benutzerdefinierten Shell-Befehle (wie Plugin-Installationen). - Für Dinge, die beim Containerstart oder -neustart geschehen sollen, verwenden Sie stattdessen ein kleines Startskript oder eine
supervisord-Aufgabe, anstatt neue Hook-Namen zu erfinden. - Um Ihren eigenen Hook-Typ hinzuzufügen, erstellen Sie eine neue Vorlage mit einem benutzerdefinierten
hook: something-Eintrag und zielen Sie dann vonapp.ymldarauf ab.
TL;DR:
Nur die Hook-Namen, die tatsächlich als hook:-Einträge in Ihren Vorlagen erscheinen, existieren.
Im Standard-Discourse-Docker sind das im Grunde code, assets_precompile und web.