=head1 SYNOPSIS
-Catalyst used to contain a whole set of C<< Catalyst::Engine::XXXX >> classes to
-adapt to various different web servers, and environments (e.g. CGI, FastCGI, mod_perl)
-etc.
+The L<PSGI> 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<Plack> is a set
+of middleware tools for running Perl applications compatible with the
+PSGI specification.
-This has been changed so that all of that work is done by Catalyst just implementing
-the L<PSGI> specification, and using L<Plack>'s adaptors to implement that functionality.
+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 means that we can share common code, and fixes for specific web servers.
+This has been changed in Catalyst 5.9 so that all of that work is done
+by Catalyst implementing the L<PSGI> specification, using L<Plack>'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 this means very little, and you should be
-able to upgrade to the latest release with little or no trouble (See notes in L<Catalyst::Upgrading>
-for specifics about your web server deployment).
+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<Catalyst::Upgrading> for specifics about your web server
+deployment).
=head1 Writing your own PSGI file.
-=head2 What is a .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<myapp.psgi> file in the root
+of your application.
-A C<< .psgi >> file lets you manually controll how your application code reference is built.
+=head2 Why would I want to write my own .psgi file?
-Catalyst normally takes care of this for you, but it's possible to do it manually by
-creating a C<myapp.psgi> file in the root of your application.
+Writing your own .psgi file allows you to use the alternate L<plackup> command
+to start your application, and allows you to add classes and extensions
+that implement L<Plack::Middleware>, such as L<Plack::Middleware::ErrorDocument>
+or L<Plack::Middleware::AccessLog>.
The simplest C<.psgi> file for an application called C<TestApp> would be:
my $app = sub { TestApp->psgi_app(@_) };
-It should be noted that Catalyst may apply a number of middleware components for
-you automatically, and these B<will not> be applied if you manually create
-a psgi file yourself. Details of these middlewares can be found below.
+Note that Catalyst will apply a number of middleware components for you
+automatically, and these B<will not> 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<http://search.cpan.org/dist/Plack/lib/Plack.pm#.psgi_files>
-=head2 Why would I want to make a .psgi file?
-
-Writing your own .psgi file allows you to use the alternate L<plackup> command
-to start your application, and allows you to add classes and extensions
-that implement L<Plack::Middleware>, such as L<Plack::Middleware::ErrorDocument>,
-or L<Plack::Middleware::AccessLog>.
-
-=head2 What is in the .psgi Catalyst generates by default?
+=head2 What is in the .psgi file Catalyst generates by default?
-Catalyst generates an application which, if the C<< using_frontend_proxy >>
-setting is on, is wrapped in L<Plack::Middleware::ReverseProxy>, and contains some
-engine specific fixes for uniform behaviour, as contained in:
+Catalyst generates an application which, if the C<< using_frontend_proxy
+>> setting is on, is wrapped in L<Plack::Middleware::ReverseProxy>, and
+contains some engine-specific fixes for uniform behaviour, as contained
+in:
=over
=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 >>, and if you need
-any of this functionality, you'll need to implement this in your C<< .psgi >>
-file yourself.
+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
=head1 Upgrading to Catalyst 5.9
-The major change is that L<Plack> now replaces most of the subclasses of
-L<Catalyst::Engine>. If you are using one of the standard subclasses of
-L<Catalyst::Engine> this should be a straightforward upgrade for you. It was
-a design goal for this release to be as backwardly compatible as possible.
-However since L<Plack> is different from L<Catalyst::Engine> it is possible
-that edge case differences exist. Therefore we recommend care be taken with
-this upgrade and that testing should be greater than would be the case with a
-minor point update.
+The major change is that L<Plack>, a toolkit for using the L<PSGI>
+stack, now replaces most of the subclasses of L<Catalyst::Engine>. If
+you are using one of the standard subclasses of L<Catalyst::Engine> this
+should be a straightforward upgrade for you. It was a design goal for
+this release to preserve as much backwards compatibility as possible.
+However, since L<Plack> is different from L<Catalyst::Engine>, it is
+possible that differences exist for edge cases. Therefore, we recommend
+that care be taken with this upgrade and that testing should be greater
+than would be the case with a minor point update. Please inform the
+Catalyst developers of any problems so that we can fix them and
+incorporate tests.
It is highly recommended that you become familiar with the L<Plack> ecosystem
and documentation. Being able to take advantage of L<Plack> development and
take advantage of L<Plack::Middleware> by writing your own C<< .psgi >> file
is contained in L<Catalyst::PSGI>.
-If you have created a custom subclass of L<Catalyst:Engine> you will need to
-convert it to be a subclass of L<Plack::Handler>.
+If you have created a custom subclass of L<Catalyst:Engine>, you will
+need to convert it to be a subclass of L<Plack::Handler>.
If you are using the L<Plack> engine, L<Catalyst::Engine::PSGI>, this new
release supersedes that code.
-If you are using a subclass of L<Catalyst::Engine> that is aimed at nonstandard
-or internal / testing uses, such as L<Catalyst::Engine::Embeddable> you should
-still be able to continue using that engine.
+If you are using a subclass of L<Catalyst::Engine> that is aimed at
+nonstandard or internal/testing uses, such as
+L<Catalyst::Engine::Embeddable>, you should still be able to continue
+using that engine.
Advice for specific subclasses of L<Catalyst::Engine> follows:
=head2 Upgrading the FastCGI Engine
-No upgrade needed if your myapp_fastcgi.pl script is already upgraded
-enough to use L<Catalyst::Script::FastCGI>.
+No upgrade is needed if your myapp_fastcgi.pl script is already upgraded
+to use L<Catalyst::Script::FastCGI>.
=head2 Upgrading the mod_perl / Apache Engines
-The engines that are build upon the various iterations of mod_perl,
-L<Catalyst::Engine::Apache::MP13> and
-L<Catalyst::Engine::Apache2::MP20> should be seamless upgrades and will
-work using using L<Plack::Handler::Apache1> or L<Plack::Handler::Apache2>
-as required.
+The engines that are built upon the various iterations of mod_perl,
+L<Catalyst::Engine::Apache::MP13> and L<Catalyst::Engine::Apache2::MP20>,
+should be seamless upgrades and will work using using
+L<Plack::Handler::Apache1> or L<Plack::Handler::Apache2> as required.
-L<Catalyst::Engine::Apache2::MP19>, is however no longer supported, as Plack
-does not support mod_perl version 1.99
+L<Catalyst::Engine::Apache2::MP19>, however, is no longer supported, as
+Plack does not support mod_perl version 1.99
=head2 Upgrading the HTTP Engine
=head2 Upgrading the CGI Engine
If you were using L<Catalyst::Engine::CGI> there is no upgrade needed if your
-myapp_cgi.pl script is already upgraded enough to use L<Catalyst::Script::CGI>.
+myapp_cgi.pl script is already upgraded to use L<Catalyst::Script::CGI>.
=head2 Upgrading the Preforking Engine
1;
-This takes advantage of the new script system, and adds a number of options to
-the standard server script as extra options are added by Starman.
+This takes advantage of the new script system, and will add a number of
+options to the standard server script as extra options are added by
+Starman.
More information about these options can be seen at
L<CatalystX::Script::Server::Starman/SYNOPSIS>.
An alternate route to implement this functionality is to write a simple .psgi
-file for your application, then use the L<plackup> utility to start the
+file for your application, and then use the L<plackup> utility to start the
server.
=head2 Upgrading the PSGI Engine
-If you were using L<Catalyst::Engine::PSGI> this new release supersedes this
-engine in supporting L<Plack>. By default the Engine is now always L<Plack>.
-As a result, you can stop depending on L<Catalyst::Engine::PSGI> in your
-C<Makefile.PL>.
+If you were using L<Catalyst::Engine::PSGI>, this new release supersedes
+this engine in supporting L<Plack>. By default the Engine is now always
+L<Plack>. As a result, you can remove the dependency on
+L<Catalyst::Engine::PSGI> in your C<Makefile.PL>.
Applications that were using L<Catalyst::Engine::PSGI>
previously should entirely continue to work in this release with no changes.
-However, if you have an C<app.psgi> script, then you no longer
-need to specify the PSGI engine. Instead, the L<Catalyst> application class
-now has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
-which you can wrap in middleware of your choice.
+However, if you have an C<app.psgi> script, then you no longer need to
+specify the PSGI engine. Instead, the L<Catalyst> application class now
+has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
+which you can wrap in the middleware of your choice.
Catalyst will use the .psgi for your application if it is located in the C<home>
-directory of the application
+directory of the application.
For example, if you were using L<Catalyst::Engine::PSGI> in the past, you will
have written (or generated) a C<script/myapp.psgi> file similar to this one:
my $app = sub { MyCatalystApp->psgi_app(@_) };
# If you make ^^ this mistake, your app won't work, and will confuse the hell out of you!
-You can now move C<< script/myapp.psgi >> to C<< myapp.psgi >> and the built-in
+You can now move C<< script/myapp.psgi >> to C<< myapp.psgi >>, and the built-in
Catalyst scripts and your test suite will start using your .psgi file.
-B<NOTE:> If you rename your .psgi file without these modifications, then any tests run via
-L<Catalyst::Test> will not be compatible with the new release, and will result in
-the development server starting, rather than the expected test running.
+B<NOTE:> If you rename your .psgi file without these modifications, then
+any tests run via L<Catalyst::Test> will not be compatible with the new
+release, and will result in the development server starting, rather than
+the expected test running.
-=head2 Engines which are known broken
+=head2 Engines which are known to be broken
-The following engines B<DO NOT> work as of Catalyst version 5.9. The core
-team is extremely happy to work with the developers and/or users of these
-engines to help them port to the new Plack/Engine system, however applications
-which are currently using these engines B<WILL NOT> run without modification
-to the engine code.
+The following engines B<DO NOT> work as of Catalyst version 5.9. The
+core team will be happy to work with the developers and/or users of
+these engines to help them port to the new Plack/Engine system, but for
+now, applications which are currently using these engines B<WILL NOT>
+run without modification to the engine code.
=over
=head2 Engines with unknown status
-The following engines have untested or unknown compatibility. Reports are
-highly welcomed:
+The following engines are untested or have unknown compatibility.
+Reports are highly encouraged:
=over
=item Catalyst::Engine::Mojo
-=item Catalyst::Engine::Server (Marked as Deprecated)
+=item Catalyst::Engine::Server (marked as Deprecated)
-=item Catalyst::Engine::HTTP::POE (Marked as Deprecated)
+=item Catalyst::Engine::HTTP::POE (marked as Deprecated)
=back
=head2 Tests in 5.9
-Tests should generally work the same in Catalyst 5.9, however there are some differences.
+Tests should generally work the same in Catalyst 5.9, but there are
+some differences.
-Previously, if using L<Catalyst::Test> and doing local requests (against a local server),
-if the application threw an exception then this exception propagated into the test.
+Previously, if using L<Catalyst::Test> and doing local requests (against
+a local server), if the application threw an exception then this
+exception propagated into the test.
-This behavior has been removed, and now a 500 response will be returned to the test.
-This change unifies behavior, to make local test requests behave similarly to remote
-requests.
+This behavior has been removed, and now a 500 response will be returned
+to the test. This change standardizes behavior, so that local test
+requests behave similarly to remote requests.
=head1 Upgrading to Catalyst 5.80