fixed spelling errors
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Upgrading.pod
index 7d30bcd..f74f15e 100644 (file)
@@ -8,20 +8,22 @@ 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 would be 
-possible that edge case differences would 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.
+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.
 
-It is highly recommended that you become familar with the L<Plack> ecosystem
-and documentation.  Being able to take advantage of L<Plack> development and
-middleware is a major bonus to this upgrade.
+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
+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 are using the L<Plack> engine, L<Catalyst::Engine::PSGI>, this new
-release supercedes that code.
+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
@@ -38,12 +40,12 @@ enough to use L<Catalyst::Script::FastCGI>.
 
 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 seemless upgrades and will
+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??? FIXME - is this true?
+does not support mod_perl version 1.99
 
 =head2 Upgrading the HTTP Engine
 
@@ -61,19 +63,30 @@ myapp_cgi.pl script is already upgraded enough to use L<Catalyst::Script::CGI>.
 If you were using L<Catalyst::Engine::HTTP::Prefork> then L<Starman>
 is automatically loaded.
 
-XXX FIXME - note how to run Starman with different options.
+If you were customising your server script to pass options to the prefork engine,
+then this is no longer supported. The recommended route to implement this functionality
+is to write a simple .psgi file for your application, then use the L<plackup> utility.
 
 =head2 Upgrading the PSGI Engine
 
-If you were using L<Catalyst::Engine::PSGI> this new release supercedes this
+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>.  Additionally, if you have an C<app.psgi> script you no longer
+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<Plack> compatible coderef.
+now has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
+which you can wrap in middleware of your choice.
+
+Catalyst will use the .psgi for your application if it is located in the C<home>
+directory of the application
 
 For example, if you were using L<Catalyst::Engine::PSGI> in the past, you will
-have written (or generated) an C<app.psgi> file similar to this one:
+have written (or generated) a C<script/myapp.psgi> file similar to this one:
 
     use Plack::Builder;
     use MyCatalytApp;
@@ -85,21 +98,37 @@ have written (or generated) an C<app.psgi> file similar to this one:
         sub { MyCatalystApp->run(@_) };
     };
 
-Instead, you should now just do:
+Instead, you now say:
 
     use Plack::Builder;
     use MyCatalystApp;
 
     builder {
         enable ... #enable your desired middleware
-        MyCatalystApp->raw_psgi_app;
+        MyCatalystApp->psgi_app;
     };
 
-Applications that were using and deploying via L<Catalyst::Engine::PSGI>
-previously should entirely continue to work in this release with no changes,
-however if you were using Catalyst::Engine::PSGI previously, then this is
-not compatible with L<Catalyst::Test> in the new version, and instead of
-running a test server
+In the simplest case:
+
+    MyCatalystApp->setup_engine('PSGI');
+    my $app = sub { MyCatalystApp->run(@_) }
+
+becomes
+
+    MyCatalystApp->setup_engine('PSGI');
+    my $app = MyCatalystApp->psgi_app(@_);
+
+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
+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.
 
 =head2 Engines which are known broken
 
@@ -113,6 +142,14 @@ to the engine code.
 
 =item Catalyst::Engine::Wx
 
+=item Catalyst::Engine::Zeus
+
+=item Catalyst::Engine::JobQueue::POE
+
+=item Catalyst::Engine::XMPP2
+
+=item Catalyst::Engine::SCGI
+
 =back
 
 =head2 Engines with unknown status
@@ -120,23 +157,34 @@ to the engine code.
 The following engines have untested or unknown compatibility.  Reports are
 highly welcomed:
 
-    Catalyst::Engine::Embeddable - needs testing, should work?
-    Catalyst::Engine::XMPP2
-    Catalyst::Engine::SCGI
-    Catalyst::Engine::Mojo
-    Catalyst::Engine::Zeus - broken for ages
-    Catalyst::Engine::JobQueue::POE - broken for ages
-    Catalyst::Engine::Stomp - fixed
-    Catalyst::Engine::Server (Marked as Deprecated)
-    Catalyst::Engine::HTTP::POE (Marked as Deprecated)
+=over
+
+=item Catalyst::Engine::Mojo
+
+=item Catalyst::Engine::Server (Marked as Deprecated)
+
+=item Catalyst::Engine::HTTP::POE (Marked as Deprecated)
+
+=back
+
+=head2 Specifying the engine in the call to ->setup
+
+XXX FIXME
+
+=head2 Plack functionality
+
+See L<Catalyst::PSGI>.
 
-=head2 Using middleware
+=head2 Tests in 5.89
 
-XXX Should this be here or elsewhere?
+Tests should generally work the same in Catalyst 5.89, however there are some differences.
 
-=head2 Making an app.psgi file
+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.
 
-=head2 Running with plackup?
+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.
 
 =head1 Upgrading to Catalyst 5.80
 
@@ -150,7 +198,7 @@ issues upgrading to this release.
 Most issues found with pre-existing components have been easy to
 solve. This document provides a complete description of behavior changes
 which may cause compatibility issues, and of new Catalyst warnings which
-be unclear.
+might be unclear.
 
 If you think you have found an upgrade-related issue which is not covered in
 this document, please email the Catalyst list to discuss the problem.
@@ -161,7 +209,7 @@ this document, please email the Catalyst list to discuss the problem.
 
 You can only apply method modifiers after the application's C<< ->setup >>
 method has been called. This means that modifiers will not work with methods
-which run during the call to C<< ->setup >>.
+run during the call to C<< ->setup >>.
 
 See L<Catalyst::Manual::ExtendingCatalyst> for more information about using
 L<Moose> in your applications.
@@ -221,7 +269,7 @@ you identify the ones in conflict, and resolve them.
 To be able to generate a linear @ISA, the list of superclasses for each
 class must be resolvable using the C3 algorithm. Unfortunately, when
 superclasses are being used as mixins (to add functionality used in your class),
-and with multiple inheritence, it is easy to get this wrong.
+and with multiple inheritance, it is easy to get this wrong.
 
 Most common is the case of:
 
@@ -412,7 +460,7 @@ The following test demonstrates the problem:
     use Test::More;
     isnt(BaseClass->can('foo'), Child->can('foo'));
 
-=head2 Extending Catalyst::Request or other classes in an ad-hoc manner using mk_accessors
+=head2 Extending Catalyst::Request or other classes in an ad hoc manner using mk_accessors
 
 Previously, it was possible to add additional accessors to Catalyst::Request
 (or other classes) by calling the mk_accessors class method.