X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=rt%2Fbin%2Fwebmux.pl.in;h=50b959a73a915d523ddb836e2a1687087b94ddb7;hb=ec70b9131ae5df9c58b75e8d6db75e5fddb6362a;hp=f9b792f88d3369770f5d34c87a48b6310ff91a2d;hpb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;p=freeside.git diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in index f9b792f88..50b959a73 100644 --- a/rt/bin/webmux.pl.in +++ b/rt/bin/webmux.pl.in @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -25,7 +25,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -48,90 +48,129 @@ # END BPS TAGGED BLOCK }}} use strict; -BEGIN { - $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need - $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; - $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; - $ENV{'ENV'} = '' if defined $ENV{'ENV'}; - $ENV{'IFS'} = '' if defined $ENV{'IFS'}; +package HTML::Mason::Commands; +our %session; - use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we - #set private_tempfiles +package RT::Mason; - die "RT does not support mod_perl 1.99. Please upgrade to mod_perl 2.0" - if $ENV{'MOD_PERL'} - and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:1\.9)}; +our ($Nobody, $SystemUser, $Handler, $r); -} +sub handler { + ($r) = @_; -use lib ( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@" ); -use RT; + local $SIG{__WARN__}; + local $SIG{__DIE__}; + RT::InitSignalHandlers(); -package RT::Mason; + if ($r->content_type =~ m/^httpd\b.*\bdirectory/i) { + use File::Spec::Unix; + # Our DirectoryIndex is always index.html, regardless of httpd settings + $r->filename( File::Spec::Unix->catfile( $r->filename, 'index.html' ) ); + } -use vars qw($Nobody $SystemUser $Handler $r); + Module::Refresh->refresh if RT->Config->Get('DevelMode'); -#This drags in RT's config.pm -BEGIN { - RT::LoadConfig(); - if ($RT::DevelMode) { require Module::Refresh; } -} + RT::ConnectToDatabase(); + my (%session, $status); + { + local $@; + $status = eval { $Handler->handle_request($r) }; + $RT::Logger->crit( $@ ) if $@; + } + undef %session; -{ + RT::Interface::Web::Handler->CleanupRequest(); - package HTML::Mason::Commands; - use vars qw(%session); + return $status; } -use RT::Interface::Web; -use RT::Interface::Web::Handler; -$Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters); +package main; -if ($ENV{'MOD_PERL'} && !$RT::DevelMode) { - # Under static_source, we need to purge the component cache - # each time we restart, so newer components may be reloaded. - # - # We can't do this in FastCGI or we'll blow away the component root _every_ time a new server starts - # which happens every few hits. - - use File::Path qw( rmtree ); - use File::Glob qw( bsd_glob ); - my @files = bsd_glob("$RT::MasonDataDir/obj/*"); - rmtree([ @files ], 0, 1) if @files; +# check mod_perl version if it's mod_perl +BEGIN { + die "RT does not support mod_perl 1.99. Please upgrade to mod_perl 2.0" + if $ENV{'MOD_PERL'} + and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:1\.9)}; } -sub handler { - ($r) = @_; +BEGIN { + $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need + $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; + $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; + $ENV{'ENV'} = '' if defined $ENV{'ENV'}; + $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - local $SIG{__WARN__}; - local $SIG{__DIE__}; + # bring this in before mason, to make sure we + # use private tempfiles + use CGI qw(-private_tempfiles); +} - if ($r->content_type =~ m/^httpd\b.*\bdirectory/i) { - use File::Spec::Unix; - # Our DirectoryIndex is always index.html, regardless of httpd settings - $r->filename( File::Spec::Unix->catfile( $r->filename, 'index.html' ) ); +# fix lib paths, some may be relative +BEGIN { + require File::Spec; + my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); + my $bin_path; + + for my $lib (@libs) { + unless ( File::Spec->file_name_is_absolute($lib) ) { + unless ($bin_path) { + if ( File::Spec->file_name_is_absolute(__FILE__) ) { + $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; + } + else { + require FindBin; + no warnings "once"; + $bin_path = $FindBin::Bin; + } + } + $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); + } + unshift @INC, $lib; } -# elsif (defined( $r->content_type )) { - #$r->content_type !~ m!(^text/|\bxml\b)!i or return -1; -# } - Module::Refresh->refresh if $RT::DevelMode; +} - RT::Init(); +require RT; +RT::LoadConfig(); +if ( RT->Config->Get('DevelMode') ) { + require Module::Refresh; +} +RT::Init(); - my %session; - my $status; - eval { $status = $Handler->handle_request($r) }; - if ($@) { - $RT::Logger->crit($@); +# check compatibility of the DB +{ + my $dbh = $RT::Handle->dbh; + if ( $dbh ) { + my ($status, $msg) = $RT::Handle->CheckCompatibility( $dbh, 'post' ); + die $msg unless $status; } +} - undef(%session); +require RT::Interface::Web::Handler; +$RT::Mason::Handler = RT::Interface::Web::Handler->new( + RT->Config->Get('MasonParameters') +); - RT::Interface::Web::Handler->CleanupRequest(); +# load more for mod_perl before forking +RT::InitClasses( Heavy => 1 ) if $ENV{'MOD_PERL'} || $ENV{RT_WEBMUX_HEAVY_LOAD}; - return $status; +# we must disconnect DB before fork +$RT::Handle->dbh(undef); +undef $RT::Handle; + +if ( $ENV{'MOD_PERL'} && !RT->Config->Get('DevelMode')) { + # Under static_source, we need to purge the component cache + # each time we restart, so newer components may be reloaded. + # + # We can't do this in FastCGI or we'll blow away the component + # root _every_ time a new server starts which happens every few + # hits. + + require File::Path; + require File::Glob; + my @files = File::Glob::bsd_glob("$RT::MasonDataDir/obj/*"); + File::Path::rmtree([ @files ], 0, 1) if @files; } 1;