def initialize(options={})
unless @gc_frequency = options[:gc_frequency]
@gc_frequency = 0
ARGV.each{|arg| @gc_frequency = $1.to_i if arg =~ /-gc(\d+)/ }
end
@iterations = (options[:iterations] || 100).to_i
@remote_addr = options[:remote_addr] || '127.0.0.1'
@http_host = options[:http_host] || '127.0.0.1'
@server_port = options[:server_port] || '80'
@session_data = options[:session_data] || {}
ENV['RAILS_ENV'] = 'benchmarking'
require ENV['RAILS_ROOT'] + "/config/environment"
require 'dispatcher'
ActionController::Rescue.class_eval "def local_request?; false; end"
ActionController::Rescue.class_eval "def rescue_action_in_public(exception)\ncase exception\nwhen ActionController::RoutingError, ActionController::UnknownAction\nrender_text(IO.read(File.join(RAILS_ROOT, 'public', '404.html')), \"404 Not Found\")\nelse\nrender_text(IO.read(File.join(RAILS_ROOT, 'public', '500.html')), \"500 Internal Error\")\nend\nend\n"
CGI::QueryExtension.module_eval "def read_body(content_length)\nENV['RAW_POST_DATA']\nend\n"
if ARGV.include?('-path')
$:.each{|f| STDERR.puts f}
exit
end
log_level = options[:log]
log_level = Logger::DEBUG if ARGV.include?('-log')
ARGV.each{|arg| arg =~ /-log=([a-zA-Z]*)/ && (log_level = eval("Logger::#{$1.upcase}")) }
if log_level
RAILS_DEFAULT_LOGGER.level = log_level
else
ActiveRecord::Base.logger = nil
ActionController::Base.logger = nil
ActionMailer::Base.logger = nil if defined?(ActionMailer)
end
if options.has_key?(:perform_caching)
ActionController::Base.perform_caching = options[:perform_caching]
else
ActionController::Base.perform_caching = false if ARGV.include?('-nocache')
ActionController::Base.perform_caching = true if ARGV.include?('-cache')
end
if options.has_key?(:cache_template_loading)
ActionView::Base.cache_template_loading = options[:cache_template_loading]
else
ActionView::Base.cache_template_loading = true
end
self.relative_url_root = options[:relative_url_root] || ''
@patched_gc = GC.collections.is_a?(Numeric) rescue false
if ARGV.include? '-headers_only'
require File.dirname(__FILE__) + '/write_headers_only'
end
end