Welche Hooks kann ich in app.yml verwenden?

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.


:magnifying_glass_tilted_left: 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, wird after_restart: einfach nicht ausgelöst.


:white_check_mark: 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.


:cross_mark: 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.


:toolbox: 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.


:blue_book: 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.“


:puzzle_piece: 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 von app.yml darauf 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.

2 „Gefällt mir“