Обычный способ настройки Rails-приложения для APM — использование инициализатора. Я пока не очень глубоко знаком с системой плагинов в Discourse. Есть ли способ загрузить такой инициализатор на раннем этапе жизненного цикла приложения Discourse, используя существующую систему плагинов? Если нет, какие ещё варианты существуют? Я бы предпочёл не форкать всё приложение ради добавления одного инициализатора
@sam Я пробовал это, но, похоже, этот конкретный гем ddtraceожидает возможность выполнения и в before_initialize. Однако, кажется, что before_initialize не является допустимым методом в plugin.rb. Есть ли другие варианты для плагина, чтобы запуститься раньше в жизненном цикле приложения?
Ошибка:
[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') Не удалось применить патч Datadog::Contrib::Rails::Patcher. Причина: невозможно изменить замороженный массив Расположение: /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'
Мой следующий шаг — отказаться от автоматической инструментации, применяемой «патчерами» этого гема, и вместо этого интегрировать часть логики инструментации непосредственно в плагин, аналогично тому, как вы сделали это с discourse-prometheus. В целом, это кажется разумным решением для учёта специфики Discourse. Я просто надеялся, что существует способ использовать эту «магию», который я пока не обнаружил.