¿Cuáles son todos los hooks que puedo usar en app.yml?

En realidad, no hay una lista global fija de tipos de “hooks” en app.yml.
Los “hooks” son proporcionados dinámicamente por Pups, y solo puedes adjuntarte a los que existen dentro de las plantillas que incluyes.


:magnifying_glass_tilted_left: Cómo funciona

Cuando ves algo como:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

eso funciona porque las plantillas contienen un paso como:

- hook: code
  run:
    - exec: ...

Pups te permite adjuntar comandos antes o después de cualquiera de esos puntos de “hook” definidos.
Así que si una plantilla define hook: code, puedes usar before_code: o after_code:.
Si define hook: assets_precompile, puedes usar before_assets_precompile: o after_assets_precompile: — y así sucesivamente.

Si no hay hook: restart (por ejemplo), entonces after_restart: simplemente no se activará.


:white_check_mark: Hooks conocidos que existen en las plantillas predeterminadas

De las plantillas predeterminadas templates/*.yml enviadas con Discourse Docker:

Nombre del hook Uso común Funciona con
code Etapa principal de configuración para clonación de plugins, ediciones de archivos personalizados, etc. before_code: / after_code:
assets_precompile Después de que los activos de Rails se compilan (por ejemplo, subir a S3, limpiar) after_assets_precompile:
web Para ajustes de último minuto antes de que arranque el proceso web before_web:

A menudo verás after_code: y before_code: usados en ejemplos de instalación de plugins — estos son los únicos necesarios en la mayoría de las configuraciones.


:cross_mark: Hooks que no existen por defecto

Nombres como after_restart o after_post_boot no corresponden a ningún hook: dentro de las plantillas estándar, por lo que Pups no sabe dónde adjuntarlos.
No se activarán a menos que agregues un paso hook: restart coincidente en una plantilla personalizada.


:toolbox: Cómo encontrar todos los hooks disponibles en tu sistema

Desde tu carpeta /var/discourse, ejecuta:

grep -R "hook:" -n templates/ samples/

Eso listará cada nombre de “hook” compatible con las plantillas que incluyes actualmente.
Cualquier cosa que encuentres allí se puede usar como before_<nombre>: o after_<nombre>: dentro de tu bloque hooks:.


:blue_book: Referencia

Este comportamiento se explica brevemente en el README de Pups (la herramienta de gestión de configuración utilizada por la configuración Docker de Discourse):

“Los hooks son puntos en las plantillas que permiten inyectar comandos antes o después de un paso etiquetado con hook:.”


:puzzle_piece: En la práctica

  • Usa after_code: para la mayoría de los comandos de shell personalizados (como instalaciones de plugins).
  • Para cosas que deberían ocurrir al arrancar o reiniciar el contenedor, usa un pequeño script de inicio o una tarea de supervisord en lugar de inventar nuevos nombres de “hooks”.
  • Para agregar tu propio tipo de “hook”, crea una nueva plantilla con una entrada hook: algo personalizada, luego apúntala desde app.yml.

TL;DR:
Solo existen los nombres de “hooks” que realmente aparecen como entradas hook: en tus plantillas.
En el Discourse Docker predeterminado, esos son básicamente code, assets_precompile y web.

2 Me gusta