Tiny doc fix for Engine::FastCGI
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / FastCGI.pm
CommitLineData
d1d9793f 1package Catalyst::Engine::FastCGI;
ffb41d94 2
7fa2c9c1 3use Moose;
4extends 'Catalyst::Engine::CGI';
5
0fc2d522 6# eval { Class::MOP::load_class("FCGI") };
6f409682 7eval "use FCGI";
500a1679 8die "Unable to load the FCGI module, you may need to install it:\n$@\n" if $@;
ffb41d94 9
10=head1 NAME
11
fbcc39ad 12Catalyst::Engine::FastCGI - FastCGI Engine
ffb41d94 13
14=head1 DESCRIPTION
15
fbcc39ad 16This is the FastCGI engine.
ffb41d94 17
e2fd5b5f 18=head1 OVERLOADED METHODS
19
fbcc39ad 20This class overloads some methods from C<Catalyst::Engine::CGI>.
e2fd5b5f 21
b5ecfcf0 22=head2 $self->run($c, $listen, { option => value, ... })
b0ad47c1 23
5898abae 24Starts the FastCGI server. If C<$listen> is set, then it specifies a
25location to listen for FastCGI requests;
26
b799b493 27=over 4
28
29=item /path
30
31listen via Unix sockets on /path
32
33=item :port
34
35listen via TCP on port on all interfaces
36
37=item hostname:port
38
39listen via TCP on port bound to hostname
40
41=back
5898abae 42
43Options may also be specified;
44
b799b493 45=over 4
46
47=item leave_umask
48
88eee38e 49Set to 1 to disable setting umask to 0 for socket open
50
51=item nointr
b799b493 52
53Do not allow the listener to be interrupted by Ctrl+C
54
55=item nproc
56
57Specify a number of processes for FCGI::ProcManager
58
59=item pidfile
60
61Specify a filename for the pid file
62
63=item manager
64
65Specify a FCGI::ProcManager sub-class
66
b0ad47c1 67=item detach
b799b493 68
69Detach from console
70
71=item keep_stderr
72
73Send STDERR to STDOUT instead of the webserver
74
75=back
e2fd5b5f 76
77=cut
78
fbcc39ad 79sub run {
5898abae 80 my ( $self, $class, $listen, $options ) = @_;
81
5db46287 82 my $sock = 0;
5898abae 83 if ($listen) {
84 my $old_umask = umask;
85 unless ( $options->{leave_umask} ) {
86 umask(0);
87 }
88 $sock = FCGI::OpenSocket( $listen, 100 )
89 or die "failed to open FastCGI socket; $!";
90 unless ( $options->{leave_umask} ) {
91 umask($old_umask);
92 }
93 }
6f2e0021 94 elsif ( $^O ne 'MSWin32' ) {
5898abae 95 -S STDIN
96 or die "STDIN is not a socket; specify a listen location";
97 }
98
99 $options ||= {};
6f409682 100
84528885 101 my %env;
6fc58422 102 my $error = \*STDERR; # send STDERR to the web server
103 $error = \*STDOUT # send STDERR to stdout (a logfile)
85d9fce6 104 if $options->{keep_stderr}; # (if asked to)
cfd31158 105
5898abae 106 my $request =
6fc58422 107 FCGI::Request( \*STDIN, \*STDOUT, $error, \%env, $sock,
5898abae 108 ( $options->{nointr} ? 0 : &FCGI::FAIL_ACCEPT_ON_INTR ),
109 );
110
111 my $proc_manager;
6f409682 112
113 if ($listen) {
526b698a 114 $options->{manager} ||= "FCGI::ProcManager";
115 $options->{nproc} ||= 1;
b5ecfcf0 116
526b698a 117 $self->daemon_fork() if $options->{detach};
b5ecfcf0 118
526b698a 119 if ( $options->{manager} ) {
120 eval "use $options->{manager}; 1" or die $@;
121
b5ecfcf0 122 $proc_manager = $options->{manager}->new(
123 {
526b698a 124 n_processes => $options->{nproc},
125 pid_fname => $options->{pidfile},
b5ecfcf0 126 }
127 );
128
526b698a 129 # detach *before* the ProcManager inits
130 $self->daemon_detach() if $options->{detach};
131
132 $proc_manager->pm_manage();
cfd31158 133
134 # Give each child its own RNG state.
135 srand;
dc2fc680 136 }
526b698a 137 elsif ( $options->{detach} ) {
138 $self->daemon_detach();
b5ecfcf0 139 }
5898abae 140 }
e2fd5b5f 141
fbcc39ad 142 while ( $request->Accept >= 0 ) {
5898abae 143 $proc_manager && $proc_manager->pm_pre_dispatch();
cfd31158 144
c46dd4e8 145 $self->_fix_env( \%env );
cfd31158 146
84528885 147 $class->handle_request( env => \%env );
cfd31158 148
9f778270 149 $proc_manager && $proc_manager->pm_post_dispatch();
fbcc39ad 150 }
e2fd5b5f 151}
152
b5ecfcf0 153=head2 $self->write($c, $buffer)
e2fd5b5f 154
155=cut
156
fbcc39ad 157sub write {
158 my ( $self, $c, $buffer ) = @_;
4f5ebacd 159
02570318 160 unless ( $self->_prepared_write ) {
4f5ebacd 161 $self->prepare_write($c);
02570318 162 $self->_prepared_write(1);
fbcc39ad 163 }
b0ad47c1 164
e512dd24 165 # XXX: We can't use Engine's write() method because syswrite
166 # appears to return bogus values instead of the number of bytes
167 # written: http://www.fastcgi.com/om_archive/mail-archive/0128.html
b0ad47c1 168
e512dd24 169 # Prepend the headers if they have not yet been sent
02570318 170 if ( $self->_has_header_buf ) {
171 $buffer = $self->_clear_header_buf . $buffer;
e512dd24 172 }
4f5ebacd 173
fbcc39ad 174 # FastCGI does not stream data properly if using 'print $handle',
175 # but a syswrite appears to work properly.
4f5ebacd 176 *STDOUT->syswrite($buffer);
e2fd5b5f 177}
178
b5ecfcf0 179=head2 $self->daemon_fork()
526b698a 180
181Performs the first part of daemon initialisation. Specifically,
182forking. STDERR, etc are still connected to a terminal.
183
184=cut
185
186sub daemon_fork {
187 require POSIX;
188 fork && exit;
189}
190
b5ecfcf0 191=head2 $self->daemon_detach( )
526b698a 192
193Performs the second part of daemon initialisation. Specifically,
194disassociates from the terminal.
195
196However, this does B<not> change the current working directory to "/",
197as normal daemons do. It also does not close all open file
198descriptors (except STDIN, STDOUT and STDERR, which are re-opened from
199F</dev/null>).
200
201=cut
202
203sub daemon_detach {
204 my $self = shift;
205 print "FastCGI daemon started (pid $$)\n";
b5ecfcf0 206 open STDIN, "+</dev/null" or die $!;
207 open STDOUT, ">&STDIN" or die $!;
208 open STDERR, ">&STDIN" or die $!;
526b698a 209 POSIX::setsid();
210}
211
c46dd4e8 212=head2 $self->_fix_env( $env )
213
214Adjusts the environment variables when necessary.
215
216=cut
217
218sub _fix_env
219{
220 my $self = shift;
221 my $env = shift;
222
b0ad47c1 223 # we are gonna add variables from current system environment %ENV to %env
0c913601 224 # that contains at this moment just variables taken from FastCGI request
225 foreach my $k (keys(%ENV)) {
226 $env->{$k} = $ENV{$k} unless defined($env->{$k});
227 }
228
c46dd4e8 229 return unless ( $env->{SERVER_SOFTWARE} );
230
231 # If we're running under Lighttpd, swap PATH_INFO and SCRIPT_NAME
232 # http://lists.scsys.co.uk/pipermail/catalyst/2006-June/008361.html
233 # Thanks to Mark Blythe for this fix
234 if ( $env->{SERVER_SOFTWARE} =~ /lighttpd/ ) {
235 $env->{PATH_INFO} ||= delete $env->{SCRIPT_NAME};
236 }
1dea1c87 237 elsif ( $env->{SERVER_SOFTWARE} =~ /^nginx/ ) {
238 my $script_name = $env->{SCRIPT_NAME};
239 $env->{PATH_INFO} =~ s/^$script_name//g;
240 }
5351e13d 241 # Fix the environment variables PATH_INFO and SCRIPT_NAME when running
242 # under IIS
63630a22 243 elsif ( $env->{SERVER_SOFTWARE} =~ /IIS\/[6-9]\.[0-9]/ ) {
c46dd4e8 244 my @script_name = split(m!/!, $env->{PATH_INFO});
245 my @path_translated = split(m!/|\\\\?!, $env->{PATH_TRANSLATED});
246 my @path_info;
247
248 while ($script_name[$#script_name] eq $path_translated[$#path_translated]) {
249 pop(@path_translated);
250 unshift(@path_info, pop(@script_name));
251 }
252
253 unshift(@path_info, '', '');
254
255 $env->{PATH_INFO} = join('/', @path_info);
256 $env->{SCRIPT_NAME} = join('/', @script_name);
257 }
258}
259
198b0efa 2601;
261__END__
262
198b0efa 263=head1 WEB SERVER CONFIGURATIONS
264
d7d72ad9 265=head2 Standalone FastCGI Server
266
b0ad47c1 267In server mode the application runs as a standalone server and accepts
d7d72ad9 268connections from a web server. The application can be on the same machine as
269the web server, on a remote machine, or even on multiple remote machines.
270Advantages of this method include running the Catalyst application as a
271different user than the web server, and the ability to set up a scalable
272server farm.
198b0efa 273
d7d72ad9 274To start your application in server mode, install the FCGI::ProcManager
275module and then use the included fastcgi.pl script.
198b0efa 276
d7d72ad9 277 $ script/myapp_fastcgi.pl -l /tmp/myapp.socket -n 5
b0ad47c1 278
d7d72ad9 279Command line options for fastcgi.pl include:
280
281 -d -daemon Daemonize the server.
282 -p -pidfile Write a pidfile with the pid of the process manager.
283 -l -listen Listen on a socket path, hostname:port, or :port.
284 -n -nproc The number of processes started to handle requests.
b0ad47c1 285
d7d72ad9 286See below for the specific web server configurations for using the external
287server.
198b0efa 288
d7d72ad9 289=head2 Apache 1.x, 2.x
290
291Apache requires the mod_fastcgi module. The same module supports both
292Apache 1 and 2.
293
b0ad47c1 294There are three ways to run your application under FastCGI on Apache: server,
d7d72ad9 295static, and dynamic.
296
297=head3 Standalone server mode
298
3f0911d3 299 FastCgiExternalServer /tmp/myapp.fcgi -socket /tmp/myapp.socket
439bc59c 300 Alias /myapp/ /tmp/myapp.fcgi/
b0ad47c1 301
d7d72ad9 302 # Or, run at the root
3f0911d3 303 Alias / /tmp/myapp.fcgi/
b0ad47c1 304
d7d72ad9 305 # Optionally, rewrite the path when accessed without a trailing slash
306 RewriteRule ^/myapp$ myapp/ [R]
b0ad47c1 307
3f0911d3 308
309The FastCgiExternalServer directive tells Apache that when serving
310/tmp/myapp to use the FastCGI application listenting on the socket
303c087d 311/tmp/mapp.socket. Note that /tmp/myapp.fcgi B<MUST NOT> exist --
3f0911d3 312it's a virtual file name. With some versions of C<mod_fastcgi> or
303c087d 313C<mod_fcgid>, you can use any name you like, but some require that the
3f0911d3 314virtual filename end in C<.fcgi>.
d7d72ad9 315
b0ad47c1 316It's likely that Apache is not configured to serve files in /tmp, so the
d7d72ad9 317Alias directive maps the url path /myapp/ to the (virtual) file that runs the
318FastCGI application. The trailing slashes are important as their use will
319correctly set the PATH_INFO environment variable used by Catalyst to
320determine the request path. If you would like to be able to access your app
321without a trailing slash (http://server/myapp), you can use the above
322RewriteRule directive.
323
324=head3 Static mode
325
326The term 'static' is misleading, but in static mode Apache uses its own
327FastCGI Process Manager to start the application processes. This happens at
328Apache startup time. In this case you do not run your application's
329fastcgi.pl script -- that is done by Apache. Apache then maps URIs to the
330FastCGI script to run your application.
331
332 FastCgiServer /path/to/myapp/script/myapp_fastcgi.pl -processes 3
333 Alias /myapp/ /path/to/myapp/script/myapp_fastcgi.pl/
b0ad47c1 334
d7d72ad9 335FastCgiServer tells Apache to start three processes of your application at
336startup. The Alias command maps a path to the FastCGI application. Again,
337the trailing slashes are important.
b0ad47c1 338
d7d72ad9 339=head3 Dynamic mode
340
b0ad47c1 341In FastCGI dynamic mode, Apache will run your application on demand,
d7d72ad9 342typically by requesting a file with a specific extension (e.g. .fcgi). ISPs
343often use this type of setup to provide FastCGI support to many customers.
344
345In this mode it is often enough to place or link your *_fastcgi.pl script in
346your cgi-bin directory with the extension of .fcgi. In dynamic mode Apache
347must be able to run your application as a CGI script so ExecCGI must be
348enabled for the directory.
349
350 AddHandler fastcgi-script .fcgi
351
352The above tells Apache to run any .fcgi file as a FastCGI application.
353
354Here is a complete example:
355
356 <VirtualHost *:80>
357 ServerName www.myapp.com
358 DocumentRoot /path/to/MyApp
359
360 # Allow CGI script to run
361 <Directory /path/to/MyApp>
362 Options +ExecCGI
363 </Directory>
364
365 # Tell Apache this is a FastCGI application
366 <Files myapp_fastcgi.pl>
367 SetHandler fastcgi-script
368 </Files>
198b0efa 369 </VirtualHost>
d7d72ad9 370
371Then a request for /script/myapp_fastcgi.pl will run the
372application.
b0ad47c1 373
198b0efa 374For more information on using FastCGI under Apache, visit
375L<http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html>
376
25f55123 377=head3 Authorization header with mod_fastcgi or mod_cgi
378
379By default, mod_fastcgi/mod_cgi do not pass along the Authorization header,
380so modules like C<Catalyst::Plugin::Authentication::Credential::HTTP> will
381not work. To enable pass-through of this header, add the following
382mod_rewrite directives:
383
384 RewriteCond %{HTTP:Authorization} ^(.+)
385 RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]
386
198b0efa 387=head2 Lighttpd
388
d7d72ad9 389These configurations were tested with Lighttpd 1.4.7.
390
391=head3 Standalone server mode
392
393 server.document-root = "/var/www/MyApp/root"
394
395 fastcgi.server = (
396 "" => (
397 "MyApp" => (
398 "socket" => "/tmp/myapp.socket",
399 "check-local" => "disable"
400 )
401 )
402 )
403
404=head3 Static mode
198b0efa 405
406 server.document-root = "/var/www/MyApp/root"
b0ad47c1 407
198b0efa 408 fastcgi.server = (
409 "" => (
410 "MyApp" => (
411 "socket" => "/tmp/myapp.socket",
412 "check-local" => "disable",
413 "bin-path" => "/var/www/MyApp/script/myapp_fastcgi.pl",
414 "min-procs" => 2,
415 "max-procs" => 5,
416 "idle-timeout" => 20
417 )
418 )
419 )
b0ad47c1 420
d7d72ad9 421Note that in newer versions of lighttpd, the min-procs and idle-timeout
422values are disabled. The above example would start 5 processes.
25810c41 423
d7d72ad9 424=head3 Non-root configuration
b0ad47c1 425
d7d72ad9 426You can also run your application at any non-root location with either of the
2f381252 427above modes. Note the required mod_rewrite rule.
198b0efa 428
2f381252 429 url.rewrite = ( "myapp\$" => "myapp/" )
198b0efa 430 fastcgi.server = (
d7d72ad9 431 "/myapp" => (
198b0efa 432 "MyApp" => (
d7d72ad9 433 # same as above
198b0efa 434 )
435 )
436 )
437
438For more information on using FastCGI under Lighttpd, visit
439L<http://www.lighttpd.net/documentation/fastcgi.html>
440
5351e13d 441=head2 nginx
442
443Catalyst runs under nginx via FastCGI in a similar fashion as the lighttpd
444standalone server as described above.
445
446nginx does not have its own internal FastCGI process manager, so you must run
447the FastCGI service separately.
448
449=head3 Configuration
450
451To configure nginx, you must configure the FastCGI parameters and also the
452socket your FastCGI daemon is listening on. It can be either a TCP socket
453or a Unix file socket.
454
455The server configuration block should look roughly like:
456
457 server {
458 listen $port;
459
460 location / {
64edd9df 461 fastcgi_param QUERY_STRING $query_string;
462 fastcgi_param REQUEST_METHOD $request_method;
463 fastcgi_param CONTENT_TYPE $content_type;
464 fastcgi_param CONTENT_LENGTH $content_length;
465
5a7d7e5c 466 fastcgi_param SCRIPT_NAME /;
467 fastcgi_param PATH_INFO $fastcgi_script_name;
64edd9df 468 fastcgi_param REQUEST_URI $request_uri;
469 fastcgi_param DOCUMENT_URI $document_uri;
470 fastcgi_param DOCUMENT_ROOT $document_root;
471 fastcgi_param SERVER_PROTOCOL $server_protocol;
5351e13d 472
473 fastcgi_param GATEWAY_INTERFACE CGI/1.1;
64edd9df 474 fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
5351e13d 475
64edd9df 476 fastcgi_param REMOTE_ADDR $remote_addr;
477 fastcgi_param REMOTE_PORT $remote_port;
478 fastcgi_param SERVER_ADDR $server_addr;
479 fastcgi_param SERVER_PORT $server_port;
480 fastcgi_param SERVER_NAME $server_name;
5351e13d 481
482 # Adjust the socket for your applications!
483 fastcgi_pass unix:$docroot/myapp.socket;
484 }
485 }
486
487It is the standard convention of nginx to include the fastcgi_params in a
488separate file (usually something like C</etc/nginx/fastcgi_params>) and
489simply include that file.
490
491=head3 Non-root configuration
492
1dea1c87 493If you properly specify the PATH_INFO and SCRIPT_NAME parameters your
5a7d7e5c 494application will be accessible at any path. The SCRIPT_NAME variable is the
495prefix of your application, and PATH_INFO would be everything in addition.
5351e13d 496
497As an example, if your application is rooted at /myapp, you would configure:
498
5a7d7e5c 499 fastcgi_param SCRIPT_NAME /myapp/;
500 fastcgi_param PATH_INFO $fastcgi_script_name;
5351e13d 501
502C<$fastcgi_script_name> would be "/myapp/path/of/the/action". Catalyst will
503process this accordingly and setup the application base as expected.
504
505This behavior is somewhat different than Apache and Lighttpd, but is still
506functional.
507
508For more information on nginx, visit:
509L<http://nginx.net>
510
da7aac2e 511=head2 Microsoft IIS
198b0efa 512
b0ad47c1 513It is possible to run Catalyst under IIS with FastCGI, but only on IIS 6.0
da7aac2e 514(Microsoft Windows 2003), IIS 7.0 (Microsoft Windows 2008 and Vista) and
515hopefully its successors.
516
b0ad47c1 517Even if it is declared that FastCGI is supported on IIS 5.1 (Windows XP) it
da7aac2e 518does not support some features (specifically: wildcard mappings) that prevents
519running Catalyst application.
520
521Let us assume that our server has the following layout:
522
523 d:\WWW\WebApp\ path to our Catalyst application
524 d:\strawberry\perl\bin\perl.exe path to perl interpreter (with Catalyst installed)
525 c:\windows Windows directory
526
527=head3 Setup IIS 6.0 (Windows 2003)
528
4a6f54df 529=over 4
530
531=item Install FastCGI extension for IIS 6.0
da7aac2e 532
533FastCGI is not a standard part of IIS 6 - you have to install it separately. For
534more info and download go to L<http://www.iis.net/extensions/FastCGI>. Choose
b0ad47c1 535approptiate version (32-bit/64-bit), installation is quite simple
da7aac2e 536(in fact no questions, no options).
537
4a6f54df 538=item Create a new website
da7aac2e 539
b0ad47c1 540Open "Control Panel" > "Administrative Tools" > "Internet Information Services Manager".
da7aac2e 541Click "Action" > "New" > "Web Site". After you finish the installation wizard
b0ad47c1 542you need to go to the new website's properties.
da7aac2e 543
4a6f54df 544=item Set website properties
da7aac2e 545
b0ad47c1 546On tab "Web site" set proper values for:
da7aac2e 547Site Description, IP Address, TCP Port, SSL Port etc.
548
549On tab "Home Directory" set the following:
550
551 Local path: "d:\WWW\WebApp\root"
552 Local path permission flags: check only "Read" + "Log visits"
553 Execute permitions: "Scripts only"
554
b0ad47c1 555Click "Configuration" button (still on Home Directory tab) then click "Insert"
da7aac2e 556the wildcard application mapping and in the next dialog set:
557
558 Executable: "c:\windows\system32\inetsrv\fcgiext.dll"
559 Uncheck: "Verify that file exists"
560
561Close all dialogs with "OK".
562
4a6f54df 563=item Edit fcgiext.ini
da7aac2e 564
b0ad47c1 565Put the following lines into c:\windows\system32\inetsrv\fcgiext.ini (on 64-bit
da7aac2e 566system c:\windows\syswow64\inetsrv\fcgiext.ini):
567
568 [Types]
569 *:8=CatalystApp
570 ;replace 8 with the identification number of the newly created website
571 ;it is not so easy to get this number:
572 ; - you can use utility "c:\inetpub\adminscripts\adsutil.vbs"
573 ; to list websites: "cscript adsutil.vbs ENUM /P /W3SVC"
574 ; to get site name: "cscript adsutil.vbs GET /W3SVC/<number>/ServerComment"
575 ; to get all details: "cscript adsutil.vbs GET /W3SVC/<number>"
b0ad47c1 576 ; - or look where are the logs located:
577 ; c:\WINDOWS\SYSTEM32\Logfiles\W3SVC7\whatever.log
da7aac2e 578 ; means that the corresponding number is "7"
b0ad47c1 579 ;if you are running just one website using FastCGI you can use '*=CatalystApp'
da7aac2e 580
581 [CatalystApp]
582 ExePath=d:\strawberry\perl\bin\perl.exe
583 Arguments="d:\WWW\WebApp\script\webapp_fastcgi.pl -e"
584
b0ad47c1 585 ;by setting this you can instruct IIS to serve Catalyst static files
da7aac2e 586 ;directly not via FastCGI (in case of any problems try 1)
587 IgnoreExistingFiles=0
b0ad47c1 588
da7aac2e 589 ;do not be fooled by Microsoft doc talking about "IgnoreExistingDirectories"
590 ;that does not work and use "IgnoreDirectories" instead
591 IgnoreDirectories=1
592
4a6f54df 593=back
594
da7aac2e 595=head3 Setup IIS 7.0 (Windows 2008 and Vista)
596
597Microsoft IIS 7.0 has built-in support for FastCGI so you do not have to install
598any addons.
599
4a6f54df 600=over 4
601
602=item Necessary steps during IIS7 installation
da7aac2e 603
604During IIS7 installation after you have added role "Web Server (IIS)"
b0ad47c1 605you need to check to install role feature "CGI" (do not be nervous that it is
606not FastCGI). If you already have IIS7 installed you can add "CGI" role feature
607through "Control panel" > "Programs and Features".
da7aac2e 608
4a6f54df 609=item Create a new website
da7aac2e 610
b0ad47c1 611Open "Control Panel" > "Administrative Tools" > "Internet Information Services Manager"
da7aac2e 612> "Add Web Site".
613
614 site name: "CatalystSite"
b0ad47c1 615 content directory: "d:\WWW\WebApp\root"
da7aac2e 616 binding: set proper IP address, port etc.
617
4a6f54df 618=item Configure FastCGI
da7aac2e 619
b0ad47c1 620You can configure FastCGI extension using commandline utility
da7aac2e 621"c:\windows\system32\inetsrv\appcmd.exe"
622
4a6f54df 623=over 4
624
625=item Configuring section "fastCgi" (it is a global setting)
da7aac2e 626
4a6f54df 627 appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='d:\strawberry\perl\bin\perl.exe',arguments='d:\www\WebApp\script\webapp_fastcgi.pl -e',maxInstances='4',idleTimeout='300',activityTimeout='30',requestTimeout='90',instanceMaxRequests='1000',protocol='NamedPipe',flushNamedPipe='False']" /commit:apphost
da7aac2e 628
4a6f54df 629=item Configuring proper handler (it is a site related setting)
da7aac2e 630
4a6f54df 631 appcmd.exe set config "CatalystSite" -section:system.webServer/handlers /+"[name='CatalystFastCGI',path='*',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='d:\strawberry\perl\bin\perl.exe|d:\www\WebApp\script\webapp_fastcgi.pl -e',resourceType='Unspecified',requireAccess='Script']" /commit:apphost
da7aac2e 632
b0ad47c1 633Note: before launching the commands above do not forget to change site
da7aac2e 634name and paths to values relevant for your server setup.
198b0efa 635
4a6f54df 636=back
637
638=back
639
fbcc39ad 640=head1 SEE ALSO
e2fd5b5f 641
fbcc39ad 642L<Catalyst>, L<FCGI>.
cd3bb248 643
fbcc39ad 644=head1 AUTHORS
ffb41d94 645
2f381252 646Catalyst Contributors, see Catalyst.pm
ffb41d94 647
d7d72ad9 648=head1 THANKS
649
650Bill Moseley, for documentation updates and testing.
651
ffb41d94 652=head1 COPYRIGHT
653
536bee89 654This library is free software. You can redistribute it and/or modify it under
ffb41d94 655the same terms as Perl itself.
656
657=cut