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.
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), entoncesafter_restart:simplemente no se activará.
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.
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.
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:.
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:.”
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
supervisorden lugar de inventar nuevos nombres de “hooks”. - Para agregar tu propio tipo de “hook”, crea una nueva plantilla con una entrada
hook: algopersonalizada, luego apúntala desdeapp.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.