Doc changes to Upgrading and PSGI.
Jesse Sheidlower [Sun, 14 Aug 2011 20:08:36 +0000 (16:08 -0400)]
lib/Catalyst/PSGI.pod
lib/Catalyst/Upgrading.pod
t/aggregate/psgi_file.t

index 1aec1f8..b12b76b 100644 (file)
@@ -6,29 +6,46 @@ Catalyst::PSGI - How Catalyst and PSGI work together
 
 =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:
 
@@ -38,25 +55,19 @@ 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
 
@@ -68,11 +79,11 @@ engine specific fixes for uniform behaviour, as contained in:
 
 =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
index f15995e..1955bfb 100644 (file)
@@ -4,14 +4,17 @@ Catalyst::Upgrading - Instructions for upgrading to the latest Catalyst
 
 =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
@@ -19,33 +22,33 @@ middleware is a major bonus to this upgrade. Documentation about how to
 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
 
@@ -56,7 +59,7 @@ script is upgraded to use L<Catalyst::Script::HTTP>.
 =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
 
@@ -75,33 +78,34 @@ and implement a C<MyApp::Script::Server> class that looks like this:
 
     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:
@@ -141,20 +145,21 @@ B<NOT>:
     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
 
@@ -172,16 +177,16 @@ to the engine code.
 
 =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
 
@@ -195,14 +200,16 @@ See L<Catalyst::PSGI>.
 
 =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
 
index 5b62cf2..7327d4a 100644 (file)
@@ -28,7 +28,7 @@ system($^X, '-I', "$FindBin::Bin/../lib", '-c', $path)
 #my $psgi_ref = require $path;
 # otherwise this test passes!
 # I don't exactly know why that is yet, however, to be safe for future, that
-# is why this test writes out it's own .psgi file in a temp directory - so that that
+# is why this test writes out its own .psgi file in a temp directory - so that that
 # path has never been require'd before, and will never be require'd again..
 
 local TestApp->config->{home} = $home;