# Allow the metal piece to run in isolation require( File.dirname(__FILE__) + "/../../config/environment" ) unless defined?(Rails) class PassengerRestarter @restart_url = "/restart" @default_target = "/" @restart_message = "Restarted." @set_flash = true def self.call(env) if Rails.env == 'development' && env["PATH_INFO"] =~ /^#{Regexp.quote(@restart_url)}/ perform_restart set_flash_message(env) if @set_flash redirect( redirect_target(env) ) else [404, {"Content-Type" => "text/html"}, ["Not Found"]] end end def self.perform_restart File.new( Rails.root.join("tmp/restart.txt"), "w" ) end def self.set_flash_message(env) session = env['rack.session'] flash = session["flash"] ||= ::ActionController::Flash::FlashHash.new flash[:notice] = @restart_message end def self.redirect_target(env) referer, host = env["HTTP_REFERER"], env["HTTP_HOST"] referer && referer.index(host) >= 0 ? referer : @default_target end def self.redirect(location) [302, {"Content-Type" => "text/html", "Location" => location}, [%{

Redirecting...

}]] end end