OpenInteract
view release on metacpan or search on metacpan
OpenInteract/ApacheStartup.pm view on Meta::CPAN
package OpenInteract::ApacheStartup;
# $Id: ApacheStartup.pm,v 1.26 2002/09/16 20:16:40 lachoy Exp $
use strict;
use Apache;
#use Apache::DBI;
use File::Path;
use OpenInteract::DBI;
use OpenInteract::Startup;
use constant DEBUG => 0;
$OpenInteract::ApacheStartup::VERSION = sprintf("%d.%02d", q$Revision: 1.26 $ =~ /(\d+)\.(\d+)/);
# Create a handler to put the X-Forwarded-For header into the IP
# address -- thanks Stas! (perl.apache.org/guide/)
my $PROXY_SUB = <<'PROXY';
sub OpenInteract::ProxyRemoteAddr ($) {
my ( $r ) = @_;
return unless ( ref $r );
if ( my ( $ip ) = $r->header_in( 'X-Forwarded-For' ) =~ /([^,\s]+)$/ ) {
$r->connection->remote_ip( $ip );
}
return Apache::Constants::OK;
}
PROXY
sub initialize {
my ( $class, $bc_file ) = @_;
DEBUG && _w( 1, "ApacheStartup: Reading in information for configuration: $bc_file" );
# We read the base config in first, so we can snag the apache modules
my $BASE_CONFIG = OpenInteract::Startup->read_base_config({ filename => $bc_file });
unless ( $BASE_CONFIG ) { die "Cannot create base configuration from ($bc_file)!"; }
DEBUG && _w( 1, "SERVER INIT: base configuration read in ok." );
# Read in all the Apache classes -- do this separately since we need
# to ensure that Apache::DBI gets included before DBI
#
# Word of warning! We also need to do this before using the class
# 'OpenInteract::DBI', since it 'use's the DBI module itself. Keeping
# Apache::DBI before DBI is quite important, and if there's any
# confusing in the future about it we might as well put the
# 'PerlModule Apache::DBI' before the PerlRequire statement into the
# modperl httpd.conf
my $config_dir = join( '/', $BASE_CONFIG->{website_dir},
$BASE_CONFIG->{config_dir} );
OpenInteract::Startup->require_module({ filename => "$config_dir/apache.dat" });
DEBUG && _w( 1, "SERVER INIT: apache modules read in ok." );
my $C = OpenInteract::Startup->create_config({ base_config => $BASE_CONFIG });
# Initialize the DBI drivers. Stas Beckman (stas@stason.org) wrote
# up a section in the mod_perl developer guide
# (perl.apache.org/guide/) about how this 'DBI->install_driver()' thing
# saves memory.
my $db_info = $C->{db_info};
my %dbd_installed = ();
foreach my $db_key ( keys %{ $db_info } ) {
next if ( $dbd_installed{ $db_info->{ $db_key }{driver_name} } );
DBI->install_driver( $db_info->{ $db_key }{driver_name} );
DEBUG && _w( 1, "SERVER INIT: installed DBD driver ($db_info->{ $db_key }{driver_name}) ok." );
}
# Check to see if the proxy subroutine has been loaded; if not, create it
eval { OpenInteract->ProxyRemoteAddr() };
if ( $@ =~ /^Can\'t locate object method "ProxyRemoteAddr"/ ) {
DEBUG && _w( 1, "Creating proxy subroutine" );
eval $PROXY_SUB;
die "Cannot create proxy subroutine! $@" if ( $@ );
DEBUG && _w( 1, "SERVER INIT: installed proxy subroutine ok." );
}
# If we're told, cleanup the Template Toolkit compile directory
if ( $C->{template_info}{compile_cleanup} ) {
( run in 3.618 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )