Changelog run_options
[catagits/Catalyst-Runtime.git] / lib / Catalyst / PSGI.pod
CommitLineData
ae908e7e 1=pod
2
b28a5d4a 3=head1 NAME
4
5Catalyst::PSGI - How Catalyst and PSGI work together
6
7=head1 SYNOPSIS
ae908e7e 8
e6006848 9The L<PSGI> specification defines an interface between web servers and
10Perl-based web applications and frameworks. It supports the writing of
11portable applications that can be run using various methods (as a
73862310 12standalone server, or using mod_perl, FastCGI, etc.). L<Plack> is an
13implementation of the PSGI specification for running Perl applications.
ae908e7e 14
e6006848 15Catalyst used to contain an entire set of C<< Catalyst::Engine::XXXX >>
16classes to handle various web servers and environments (e.g. CGI,
17FastCGI, mod_perl) etc.
ae908e7e 18
e6006848 19This has been changed in Catalyst 5.9 so that all of that work is done
20by Catalyst implementing the L<PSGI> specification, using L<Plack>'s
21adaptors to implement that functionality.
22
23This means that we can share common code, and share fixes for specific
24web servers.
ae908e7e 25
26=head1 I already have an application
27
e6006848 28If you already have a Catalyst application, then you should be able to
29upgrade to the latest release with little or no trouble (see the notes
30in L<Catalyst::Upgrading> for specifics about your web server
31deployment).
ae908e7e 32
33=head1 Writing your own PSGI file.
34
e6006848 35=head2 What is a .psgi file?
36
37A C<< .psgi >> file lets you control how your application code reference
38is built. Catalyst will automatically handle this for you, but it's
39possible to do it manually by creating a C<myapp.psgi> file in the root
40of your application.
ae908e7e 41
e6006848 42=head2 Why would I want to write my own .psgi file?
ae908e7e 43
e6006848 44Writing your own .psgi file allows you to use the alternate L<plackup> command
45to start your application, and allows you to add classes and extensions
46that implement L<Plack::Middleware>, such as L<Plack::Middleware::ErrorDocument>
47or L<Plack::Middleware::AccessLog>.
ae908e7e 48
49The simplest C<.psgi> file for an application called C<TestApp> would be:
50
51 use strict;
52 use warnings;
53 use TestApp;
54
cdde866b 55 my $app = TestApp->psgi_app(@_);
ae908e7e 56
e6006848 57Note that Catalyst will apply a number of middleware components for you
58automatically, and these B<will not> be applied if you manually create a
59psgi file yourself. Details of these components can be found below.
ae908e7e 60
61Additional information about psgi files can be found at:
62L<http://search.cpan.org/dist/Plack/lib/Plack.pm#.psgi_files>
63
e6006848 64=head2 What is in the .psgi file Catalyst generates by default?
ae908e7e 65
73862310 66Catalyst generates an application which, if the C<using_frontend_proxy>
67setting is on, is wrapped in L<Plack::Middleware::ReverseProxy>, and
e6006848 68contains some engine-specific fixes for uniform behaviour, as contained
69in:
a412b2f4 70
71=over
72
0aafa77a 73=item L<Plack::Middleware::LighttpdScriptNameFix>
a412b2f4 74
75=item L<Plack::Middleware::IIS6ScriptNameFix>
76
c3519b10 77=item nginx - local to Catalyst
a412b2f4 78
79=back
80
e6006848 81If you override the default by providing your own C<< .psgi >> file,
82then none of these things will be done automatically for you by the PSGI
83application returned when you call C<< MyApp->psgi_app >>. Thus, if you
84need any of this functionality, you'll need to implement this in your
85C<< .psgi >> file yourself.
a412b2f4 86
d81c3c19 87An apply_default_middlewares method is supplied to wrap your application
88in the default middlewares if you want this behaviour and you are providing
89your own .psgi file.
3f22de0b 90
ae908e7e 91=head1 SEE ALSO
92
93L<Catalyst::Upgrading>, L<Plack>, L<PSGI::FAQ>, L<PSGI>.
94
95=head1 AUTHORS
96
97Catalyst Contributors, see Catalyst.pm
98
99=head1 COPYRIGHT
100
101This library is free software. You can redistribute it and/or modify
102it under the same terms as Perl itself.
103
104=cut