Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在PhusionPassenger.on_事件()上的fork之后插入代码_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 如何在PhusionPassenger.on_事件()上的fork之后插入代码

Ruby on rails 如何在PhusionPassenger.on_事件()上的fork之后插入代码,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Ruby On Rails 5,PhusionPassenger.on_事件是否有一个参数将用于after_fork?而不是:启动\u worker\u进程 我想介绍一下运行在passenger中的rails控制器和模型的monkey补丁类和方法。问题是,如果rails注意到类或控制器和模型中有更新,rails将重新加载,而乘客创建了新的过程,这给了我一段艰难的时间,因为猴子修补了类,并重置为原始 有办法吗 这是我的示例代码 if defined?(PhusionPassenger) PhusionPassenger.on

PhusionPassenger.on_事件是否有一个参数将用于after_fork?而不是:启动\u worker\u进程

我想介绍一下运行在passenger中的rails控制器和模型的monkey补丁类和方法。问题是,如果rails注意到类或控制器和模型中有更新,rails将重新加载,而乘客创建了新的过程,这给了我一段艰难的时间,因为猴子修补了类,并重置为原始

有办法吗

这是我的示例代码

if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
     require 'path/monkeypatched_script'
  end
end
在monkeypatched_脚本中是我的脚本,我试图在其中对类和方法进行猴子补丁

当我运行应用程序时,它会生成3个进程。前两个过程 require'path/monkeypatched_script'性能良好,但在第三个过程中,require'path/monkeypatched_script'没有执行

回到我的问题上来,是否还有另外一个参数:启动将作为after\u fork的\u worker\u进程

这是猴子补丁的脚本

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

其目的是获取数据、监控类/方法性能并将其添加到日志中

monkey补丁代码在哪里?你能举一个你试过的代码的例子吗?请看我编辑的Hello,并尽我所能解释更多细节。现在还不清楚你的猴子补丁在做什么,或者你为什么需要它。但这种设计模式似乎有缺陷。处理分叉的代码在哪里?是什么?您使用的是什么模式?standalone、apache或nginx?我使用的模式是standalone。例如,我从控制器/模型中修补了一个方法,添加了一些字符串显示。我还没有将处理分叉的代码,因为我目前拥有的是属于控制器/模型的monkey patch方法代码。我不知道on_事件的哪一部分,或者是否有我上面提到的另一个参数,以及将fork代码放在哪里