La méthode habituelle pour configurer une application Rails pour l’APM consiste à utiliser un initialiseur. Je ne suis pas encore très familier avec le système de plugins de Discourse. Existe-t-il un moyen de charger un tel initialiseur tôt dans le cycle de vie de l’application Discourse en utilisant le système de plugins existant ? Sinon, quelles autres options existent ? Je préférerais éviter de devoir forker l’ensemble de l’application juste pour ajouter un seul initialiseur .
@sam J’ai essayé, mais apparemment ce gem ddtraces’attend à pouvoir s’exécuter également dans before_initialize. Cependant, il ne semble pas que before_initialize soit une méthode valide dans plugin.rb. Y a-t-il d’autres options pour qu’un plugin s’exécute plus tôt dans le cycle de vie de l’application ?
Erreur :
[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') Échec de l'application du correctif Datadog::Contrib::Rails::Patcher. Cause : impossible de modifier un tableau figé Emplacement : /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'
Ma prochaine étape consisterait à ne pas utiliser l’instrumentation automatique appliquée par les « patchers » de ce gem, mais plutôt à intégrer une partie de la logique d’instrumentation réelle dans le plugin lui-même, de manière similaire à ce que vous avez fait avec discourse-prometheus. Je pense que cela aurait du sens de toute façon pour s’intégrer à certaines spécificités de Discourse. J’espérais simplement qu’il existe un moyen de tirer parti de cette magie que je n’ai pas encore découvert.