Как вставить код после разветвления на PhusionPassenger.on_event () - PullRequest
2 голосов
/ 31 мая 2019

Есть ли параметр для PhusionPassenger.on_event, который будет действовать для after_fork? вместо: start_worker_process

Я бы хотел, чтобы обезьяна исправила класс и метод контроллеров рельсов и моделей, которые работают в пассажирском режиме. Проблема в том, что рельсы будут перезагружаться, если рельсы заметили обновления в классе или контроллере и модели, в то время как пассажир создает новый процесс, который доставляет мне трудности, так как обезьяна пропатчила классы, где сброс на исходный.

Есть ли способ, как это сделать?

Вот мой пример кода;

if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
     require 'path/monkeypatched_script'
  end
end

Внутри monkeypatched_script находится мой скрипт, в котором я попытался обезьяньей заплатить класс и метод.

Когда я запускаю свое приложение, оно генерирует 3 процесса. Первые 2 процесса require 'path / monkeypatched_script' работает хорошо, однако в 3-м процессе require 'path / monkeypatched_script' не выполнялся.

вернемся к моему вопросу, если есть другой параметр, кроме: initial_worker_process, который будет действовать для after_fork.

Вот скрипт обезьяньего патча;

Article.class_eval do 
  alias :reduce_str_without_apm :reduce_str 
  def reduce_str(*args, &block) 
    return reduce_str_without_apm(*args, &block) unless RubyAPM.current_transaction

    name = "Custom Instrument" 
    type = "Article#reduce_str" 
    ctx = Span::Context.new( CATEGORY: 'Ruby' ) 

    req = reduce_str_without_apm(*args, &block) 

    RubyAPM.span name, type, context: ctx do 
      req 
    end 
  end 
end

Цель - извлечь данные, отслеживать производительность класса / метода и добавить их в журналы

...