app.yml で使用できるフックはすべて何ですか

app.yml には、実際には固定されたグローバルなフックタイプのリストはありません。

フックは Pups によって動的に提供され、含めるテンプレート内に存在するフックにのみアタッチできます。


:magnifying_glass_tilted_left: 仕組み

次のようなものを見た場合:

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: は単に実行されません。


:white_check_mark: 標準テンプレートに存在するフック

Discourse Docker に同梱されているデフォルトの templates/*.yml から:

フック名 一般的な使用法 対応するもの
code プラグインのクローン、カスタムファイルの編集などのメインセットアップステージ。 before_code: / after_code:
assets_precompile Rails アセットのコンパイル後(例:S3 へのアップロード、クリーンアップ) after_assets_precompile:
web Web プロセスが起動する前の最終調整用 before_web:

プラグインインストールの例では、after_code: および before_code: がよく使用されます。これらはほとんどのセットアップで必要な唯一のものです。


:cross_mark: デフォルトでは存在しないフック

after_restartafter_post_boot のような名前は、標準テンプレート内の hook: に対応しないため、Pups はどこにアタッチすればよいかわかりません。
カスタムテンプレートに一致する hook: restart ステップを追加しない限り、トリガーされません。


:toolbox: システムで利用可能なすべてのフックを見つける方法

/var/discourse フォルダから、次を実行します。

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

これにより、現在含めているテンプレートでサポートされているすべてのフック名が一覧表示されます。
そこで見つけたものはすべて、hooks: ブロック内で before_<name>: または after_<name>: として使用できます。


:blue_book: 参考

この動作は、Discourse Docker の Docker セットアップで使用される設定管理ツールである Pups README で簡単に説明されています。

「フックは、テンプレート内のポイントであり、hook: でラベル付けされたステップの前または後にコマンドを挿入できます。」


:puzzle_piece: 実践

  • ほとんどのカスタムシェルコマンド(プラグインのインストールなど)には after_code: を使用します。
  • コンテナの起動または再起動時に発生する必要があるものについては、新しいフック名を考案する代わりに、小さな起動スクリプトまたは supervisord タスクを使用します。
  • 独自のフックタイプを追加するには、カスタム hook: something エントリを持つ新しいテンプレートを作成し、それを app.yml からターゲットにします。

TL;DR:
テンプレートに hook: エントリとして実際に表示されるフック名のみが存在します。
標準の Discourse Docker では、基本的に codeassets_precompile、および web です。

「いいね!」 2