From 0e10a8c857fa6278e74802fb71d8c0cf31150820 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 22 Apr 2014 19:29:56 -0500 Subject: [PATCH] Adding pod example for Perl --- samples/Perl/PSGI.pod | 111 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 samples/Perl/PSGI.pod diff --git a/samples/Perl/PSGI.pod b/samples/Perl/PSGI.pod new file mode 100644 index 00000000..a05e0023 --- /dev/null +++ b/samples/Perl/PSGI.pod @@ -0,0 +1,111 @@ +=pod + +=head1 NAME + +Catalyst::PSGI - How Catalyst and PSGI work together + +=head1 SYNOPSIS + +The L specification defines an interface between web servers and +Perl-based web applications and frameworks. It supports the writing of +portable applications that can be run using various methods (as a +standalone server, or using mod_perl, FastCGI, etc.). L is an +implementation of the PSGI specification for running Perl applications. + +Catalyst used to contain an entire set of C<< Catalyst::Engine::XXXX >> +classes to handle various web servers and environments (e.g. CGI, +FastCGI, mod_perl) etc. + +This has been changed in Catalyst 5.9 so that all of that work is done +by Catalyst implementing the L specification, using L's +adaptors to implement that functionality. + +This means that we can share common code, and share fixes for specific +web servers. + +=head1 I already have an application + +If you already have a Catalyst application, then you should be able to +upgrade to the latest release with little or no trouble (see the notes +in L for specifics about your web server +deployment). + +=head1 Writing your own PSGI file. + +=head2 What is a .psgi file? + +A C<< .psgi >> file lets you control how your application code reference +is built. Catalyst will automatically handle this for you, but it's +possible to do it manually by creating a C file in the root +of your application. + +=head2 Why would I want to write my own .psgi file? + +Writing your own .psgi file allows you to use the alternate L command +to start your application, and allows you to add classes and extensions +that implement L, such as L +or L. + +The simplest C<.psgi> file for an application called C would be: + + use strict; + use warnings; + use TestApp; + + my $app = TestApp->psgi_app(@_); + +Note that Catalyst will apply a number of middleware components for you +automatically, and these B be applied if you manually create a +psgi file yourself. Details of these components can be found below. + +Additional information about psgi files can be found at: +L + +=head2 What is in the .psgi file Catalyst generates by default? + +Catalyst generates an application which, if the C +setting is on, is wrapped in L, and +contains some engine-specific fixes for uniform behaviour, as contained +in: + +=over + +=item L + +=item L + +=back + +If you override the default by providing your own C<< .psgi >> file, +then none of these things will be done automatically for you by the PSGI +application returned when you call C<< MyApp->psgi_app >>. Thus, if you +need any of this functionality, you'll need to implement this in your +C<< .psgi >> file yourself. + +An apply_default_middlewares method is supplied to wrap your application +in the default middlewares if you want this behaviour and you are providing +your own .psgi file. + +This means that the auto-generated (no .psgi file) code looks something +like this: + + use strict; + use warnings; + use TestApp; + + my $app = TestApp->apply_default_middlewares(TestApp->psgi_app(@_)); + +=head1 SEE ALSO + +L, L, L, L. + +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm + +=head1 COPYRIGHT + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut