Binding to PhusionPassenger::Rack::RequestHandler#process_request() is the only mechanism I have found.
To do this similarly to Unicorn OobGC, you can use the following module:
module PassengerOobGC def self.install!(path, interval = 5) self.const_set :OOBGC_PATH, path self.const_set :OOBGC_INTERVAL, interval @@oob_nr = interval PhusionPassenger::Rack::RequestHandler.send :include, self end def self.included(base) base.send :alias_method_chain, :process_request, :gc end def process_request_with_gc(env, *args) process_request_without_gc(env, *args) if OOBGC_PATH =~ env["PATH_INFO"] && ((@@oob_nr -= 1) <= 0) @@oob_nr = OOBGC_INTERVAL GC.start end end end
and call it in the initializer with:
if defined?(PhusionPassenger::Rack::RequestHandler) require 'passenger_oob_gc' PassengerOobGC.install!(%r{^/admin/}, 3) end
eric
source share