raph
(Raph Estrada)
1
みなさんこんにちは!初めて投稿します。カテゴリが間違っていたらすみません。
Datadog APM インストゥルメンテーション の設定を行いたいと考えており、そのためにカスタムプラグインを使用するのが妥当だと考えました(discourse-prometheus のアイデアを参考にしています)。
Rails アプリを APM に設定する一般的な方法はイニシャライザーを使用することですが、Discourse のプラグインシステムについてはまだ深く理解していません。既存のプラグインシステムを使って、Discourse アプリのライフサイクルの早い段階でそのようなイニシャライザーをロードする方法はありますか?もしない場合、他の選択肢はどのようなものがありますか?単一のイニシャライザーを追加するためにアプリ全体をフォークするのは避けたいと考えています:sweat_smile
sam
(Sam Saffron)
2
prometheus プラグインでも同じパターンに従ってください:
after_initialize は、このコードを配置したい場所である可能性が非常に高いです。
raph
(Raph Estrada)
3
@sam、迅速なご回答ありがとうございます!試してみますので、結果をお知らせします。
raph
(Raph Estrada)
4
@sam その方法を試しましたが、どうやらこの特定の ddtrace gem は before_initialize 内でも実行できることを前提としている ようです。しかし、plugin.rb において before_initialize は有効なメソッドではないようです。アプリのライフサイクルのより早い段階でプラグインを実行するための他の選択肢はありますか?
エラー:
[2020-06-30T15:30:40.348519 #2313] ERROR -- ddtrace: [ddtrace] (/workspace/plugins/discourse-datadog/gems/2.6.2/gems/ddtrace-0.37.0/lib/ddtrace/contrib/patcher.rb:43:in `on_patch_error') Failed to apply Datadog::Contrib::Rails::Patcher patch. Cause: can't modify frozen Array Location: /home/vscode/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/actionpack-6.0.3.1/lib/action_dispatch/middleware/stack.rb:102:in `insert'
raph
(Raph Estrada)
5
次のステップとしては、その gem の「パッチャー」で適用される自動的な計測機能を使わず、代わりに実際の計測ロジックの一部をプラグイン自体に組み込むことを検討することです。これは、discourse-prometheus であなたが行った方法に似ています。Discourse の特定の機能に接続するには、いずれにせよその方が理にかなっていると思います。まだ見落としている可能性がある、その魔法のような仕組みを活用できる方法があることを期待していました。
@raph、このプラグインは自動インスツルメンテーションだけでも動作しましたか?