A maneira usual de configurar um aplicativo Rails para APM é usar um inicializador (initializer) — ainda não estou profundamente familiarizado com o sistema de plugins do Discourse. Existe alguma maneira de carregar esse inicializador no início do ciclo de vida do aplicativo Discourse usando o sistema de plugins existente? Se não, quais outras opções existem? Preferiria não ter que fazer um fork de todo o aplicativo apenas para adicionar um único inicializador
@sam Tentei isso, mas aparentemente essa gem específica do ddtraceespera poder ser executada também no before_initialize. No entanto, parece que before_initialize não é um método válido em plugin.rb. Existem outras opções para um plugin ser executado mais cedo no ciclo de vida do aplicativo?
Erro:
[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') Falha ao aplicar o patch Datadog::Contrib::Rails::Patcher. Causa: não é possível modificar Array congelado Local: /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'
Meu próximo passo seria não usar a instrumentação automática aplicada pelos ‘patchers’ dessa gem, mas sim incorporar parte da lógica real de instrumentação no próprio plugin, de forma semelhante ao que você fez com discourse-prometheus. Acho que faria sentido, de qualquer forma, integrar-se a alguns detalhes específicos do Discourse. Eu só esperava que houvesse uma maneira de aproveitar essa mágica que eu ainda não tinha visto.