В app.yml на самом деле нет фиксированного глобального списка типов хуков.
Хуки предоставляются динамически Pups, и вы можете подключаться только к тем, которые существуют внутри включаемых вами шаблонов.
Как это работает
Когда вы видите что-то вроде:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
это работает, потому что шаблоны содержат шаг вроде:
- hook: code
run:
- exec: ...
Pups позволяет прикреплять команды до или после любой из этих определённых точек хука.
Таким образом, если шаблон определяет hook: code, вы можете использовать before_code: или after_code:.
Если он определяет hook: assets_precompile, вы можете использовать before_assets_precompile: или after_assets_precompile: — и так далее.
Если нет hook: restart (например), то after_restart: просто не сработает.
Хуки, которые, как известно, существуют в стандартных шаблонах
Из стандартных templates/*.yml, поставляемых с Discourse Docker:
| Имя хука |
Типичное использование |
Работает с |
code |
Основной этап настройки для клонирования плагинов, редактирования пользовательских файлов и т. д. |
before_code: / after_code: |
assets_precompile |
После компиляции ассетов Rails (например, загрузка в S3, очистка) |
after_assets_precompile: |
web |
Для окончательных доработок перед запуском веб-процесса |
before_web: |
Часто в примерах установки плагинов используются after_code: и before_code: — в большинстве случаев достаточно только их.
Хуки, которых нет по умолчанию
Имена вроде after_restart или after_post_boot не соответствуют никакому hook: внутри стандартных шаблонов, поэтому Pups не знает, куда их прикрепить.
Они не сработают, если вы не добавите шаг с соответствующим hook: restart в пользовательский шаблон.
Как найти все доступные хуки в вашей системе
Из папки /var/discourse выполните:
grep -R "hook:" -n templates/ samples/
Это выведет список всех имён хуков, поддерживаемых включёнными вами шаблонами.
Любое найденное имя можно использовать как before_<name>: или after_<name>: внутри блока hooks:.
Справочная информация
Это поведение кратко описано в README PUPS (инструмент управления конфигурацией, используемый настройкой Docker для Discourse):
«Хуки — это точки в шаблонах, которые позволяют вставлять команды до или после шага, помеченного как hook:.»
На практике
- Используйте
after_code: для большинства пользовательских команд оболочки (например, установка плагинов).
- Для действий, которые должны происходить при загрузке или перезапуске контейнера, используйте небольшой скрипт запуска или задачу
supervisord, а не придумывайте новые имена хуков.
- Чтобы добавить свой собственный тип хука, создайте новый шаблон с пользовательской записью
hook: something, а затем обратитесь к нему из app.yml.
TL;DR:
Существуют только те имена хуков, которые фактически встречаются как записи hook: в ваших шаблонах.
В стандартном Discourse Docker это, по сути, code, assets_precompile и web.