X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FFastCGI.pm;h=2eb34cda3ad34ca7e3a0bee1ea00d16755927c44;hb=6f409682667c23a00552d0573c157ee3487c29bc;hp=d832bea5fb577084c212b1c7bfdd0fa168a1648c;hpb=25810c4166765e5a393245b36fc6d1aad989f0c4;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/FastCGI.pm b/lib/Catalyst/Engine/FastCGI.pm index d832bea..2eb34cd 100644 --- a/lib/Catalyst/Engine/FastCGI.pm +++ b/lib/Catalyst/Engine/FastCGI.pm @@ -2,7 +2,8 @@ package Catalyst::Engine::FastCGI; use strict; use base 'Catalyst::Engine::CGI'; -use FCGI; +eval "use FCGI"; +die "Please install FCGI\n" if $@; =head1 NAME @@ -37,6 +38,7 @@ Options may also be specified; interrupted by Ctrl+C nproc Specify a number of processes for FCGI::ProcManager + pidfile Specify a filename for the pid file =cut @@ -62,23 +64,32 @@ sub run { $options ||= {}; + my %env; + my $request = - FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $sock, + FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%env, $sock, ( $options->{nointr} ? 0 : &FCGI::FAIL_ACCEPT_ON_INTR ), ); my $proc_manager; - if ( $listen and ( $options->{nproc} || 1 ) > 1 ) { + if ($listen) { require FCGI::ProcManager; + $options->{nproc} ||= 1; + $proc_manager = FCGI::ProcManager->new( { n_processes => $options->{nproc} } ); + + if ( $options->{pidfile} ) { + $proc_manager->pm_write_pid_file( $options->{pidfile} ); + } + $proc_manager->pm_manage(); } while ( $request->Accept >= 0 ) { $proc_manager && $proc_manager->pm_pre_dispatch(); - $class->handle_request; + $class->handle_request( env => \%env ); $proc_manager && $proc_manager->pm_pre_dispatch(); } } @@ -114,7 +125,7 @@ control the running of your FastCGI processes. # Launch the FastCGI processes FastCgiIpcDir /tmp - FastCgiServer /var/www/MyApp/script/myapp_fastcgi.pl -idle_timeout 300 -processes 5 + FastCgiServer /var/www/MyApp/script/myapp_fastcgi.pl -idle-timeout 300 -processes 5 ScriptAlias / /var/www/MyApp/script/myapp_fastcgi.pl/