Fix typo and deprication warning in wrong section in Upgrading.pod
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Upgrading.pod
CommitLineData
8c57b129 1=head1 NAME
2
3Catalyst::Upgrading - Instructions for upgrading to the latest Catalyst
4
ba7766f8 5=head1 Upgrading to Catalyst 5.90040
717fc5c9 6
8275d3b9 7=head2 Catalyst::Plugin::Unicode::Encoding is now core
8
9The previously stand alone Unicode support module L<Catalyst::Plugin::Unicode::Encoding>
10has been brought into core as a default plugin. Going forward, all you need is
11to add a configuration setting for the encoding type. For example:
12
13 package Myapp::Web;
14
15 use Catalyst;
16
17 __PACKAGE__->config( encoding => 'UTF-8' );
18
19Please note that this is different from the old stand alone plugin which applied
20C<UTF-8> encoding by default (that is, if you did not set an explicit
21C<encoding> configuration value, it assumed you wanted UTF-8). In order to
22preserve backwards compatibility you will need to explicitly turn it on via the
23configuration setting. THIS MIGHT CHANGE IN THE FUTURE, so please consider
24starting to test your application with proper UTF-8 support and remove all those
25crappy hacks you munged into the code because you didn't know the Plugin
26existed :)
27
28For people that are using the Plugin, you will note a startup warning suggesting
29that you can remove it from the plugin list. When you do so, please remember to
30add the configuration setting, since you can no longer rely on the default being
31UTF-8. We'll add it for you if you continue to use the stand alone plugin and
32we detect this, but this backwards compatibility shim will likely be removed in
33a few releases (trying to clean up the codebase after all).
34
ade3da0a 35B<NOTE>: One other difference between the cored plugin and the stand alone one
36is that in core we no longer throw an exception when there's a decode failure
37but instead log a warning. If you rely on exceptions for control flow, you
38will need to override method C<handle_unicode_encoding_exception> to die instead
39of warning. Please let the dev team know if this is a problem for you.
40
8275d3b9 41If you have trouble with any of this, please bring it to the attention of the
42Catalyst maintainer group.
43
44=head2 basic async and event loop support
45
717fc5c9 46This version of L<Catalyst> offers some support for using L<AnyEvent> and
e37f92f5 47L<IO::Async> event loops in your application. These changes should work
48fine for most applications however if you are already trying to perform
49some streaming, minor changes in this area of the code might affect your
4e6e0ab2 50functionality. Please see L<Catalyst::Response\write_fh> for more and for a
51basic example.
8275d3b9 52
53We consider this feature experimental. We will try not to break it, but we
54reserve the right to make necessary changes to fix major issues that people
55run into when the use this functionality in the wild.
717fc5c9 56
ba7766f8 57=head1 Upgrading to Catalyst 5.90030
58
59=head2 Regex dispatch type is deprecated.
60
61The Regex dispatchtype (L<Catalyst::DispatchType::Regex>) has been deprecated.
62
63You are encouraged to move your application to Chained dispatch (L<Catalyst::DispatchType::Chained>).
64
65If you cannot do so, please add a dependency to Catalyst::DispatchType::Regex to your application's
66Makefile.PL
67
dacd8b0e 68=head1 Upgrading to Catalyst 5.9
5d5f4a73 69
e6006848 70The major change is that L<Plack>, a toolkit for using the L<PSGI>
862a7989 71specification, now replaces most of the subclasses of L<Catalyst::Engine>. If
e6006848 72you are using one of the standard subclasses of L<Catalyst::Engine> this
73should be a straightforward upgrade for you. It was a design goal for
74this release to preserve as much backwards compatibility as possible.
75However, since L<Plack> is different from L<Catalyst::Engine>, it is
76possible that differences exist for edge cases. Therefore, we recommend
77that care be taken with this upgrade and that testing should be greater
78than would be the case with a minor point update. Please inform the
79Catalyst developers of any problems so that we can fix them and
80incorporate tests.
5d5f4a73 81
773b3b08 82It is highly recommended that you become familiar with the L<Plack> ecosystem
ae908e7e 83and documentation. Being able to take advantage of L<Plack> development and
84middleware is a major bonus to this upgrade. Documentation about how to
85take advantage of L<Plack::Middleware> by writing your own C<< .psgi >> file
86is contained in L<Catalyst::PSGI>.
5d5f4a73 87
e6006848 88If you have created a custom subclass of L<Catalyst:Engine>, you will
89need to convert it to be a subclass of L<Plack::Handler>.
5d5f4a73 90
91If you are using the L<Plack> engine, L<Catalyst::Engine::PSGI>, this new
773b3b08 92release supersedes that code.
5d5f4a73 93
e6006848 94If you are using a subclass of L<Catalyst::Engine> that is aimed at
95nonstandard or internal/testing uses, such as
96L<Catalyst::Engine::Embeddable>, you should still be able to continue
97using that engine.
5d5f4a73 98
99Advice for specific subclasses of L<Catalyst::Engine> follows:
100
93d60cae 101=head2 Upgrading the FastCGI Engine
5d5f4a73 102
e6006848 103No upgrade is needed if your myapp_fastcgi.pl script is already upgraded
104to use L<Catalyst::Script::FastCGI>.
5d5f4a73 105
93d60cae 106=head2 Upgrading the mod_perl / Apache Engines
5d5f4a73 107
e6006848 108The engines that are built upon the various iterations of mod_perl,
14148e06 109L<Catalyst::Engine::Apache::MP13> (for mod_perl 1, and Apache 1.x) and
862a7989 110L<Catalyst::Engine::Apache2::MP20> (for mod_perl 2, and Apache 2.x),
14148e06 111should be seamless upgrades and will work using using L<Plack::Handler::Apache1>
112or L<Plack::Handler::Apache2> as required.
5d5f4a73 113
e6006848 114L<Catalyst::Engine::Apache2::MP19>, however, is no longer supported, as
862a7989 115Plack does not support mod_perl version 1.99. This is unlikely to be a
116problem for anyone, as 1.99 was a brief beta-test release for mod_perl
1172, and all users of mod_perl 1.99 are encouraged to upgrade to a
118supported release of Apache 2 and mod_perl 2.
5d5f4a73 119
93d60cae 120=head2 Upgrading the HTTP Engine
5d5f4a73 121
040835f0 122The default development server that comes with the L<Catalyst> distribution
123should continue to work as expected with no changes as long as your C<myapp_server>
124script is upgraded to use L<Catalyst::Script::HTTP>.
5d5f4a73 125
93d60cae 126=head2 Upgrading the CGI Engine
5d5f4a73 127
697a3e9e 128If you were using L<Catalyst::Engine::CGI> there is no upgrade needed if your
e6006848 129myapp_cgi.pl script is already upgraded to use L<Catalyst::Script::CGI>.
5d5f4a73 130
cf8eab35 131=head2 Upgrading Catalyst::Engine::HTTP::Prefork
5d5f4a73 132
040835f0 133If you were using L<Catalyst::Engine::HTTP::Prefork> then L<Starman>
da9eab5a 134is automatically loaded. You should (at least) change your C<Makefile.PL>
135to depend on Starman.
0ea8962d 136
da9eab5a 137You can regenerate your C<myapp_server.pl> script with C<catalyst.pl>
138and implement a C<MyApp::Script::Server> class that looks like this:
139
140 package MyApp::Script::Server;
141 use Moose;
142 use namespace::autoclean;
143
144 extends 'CatalystX::Script::Server::Starman';
145
146 1;
147
e6006848 148This takes advantage of the new script system, and will add a number of
149options to the standard server script as extra options are added by
150Starman.
da9eab5a 151
152More information about these options can be seen at
153L<CatalystX::Script::Server::Starman/SYNOPSIS>.
154
155An alternate route to implement this functionality is to write a simple .psgi
e6006848 156file for your application, and then use the L<plackup> utility to start the
da9eab5a 157server.
5d5f4a73 158
93d60cae 159=head2 Upgrading the PSGI Engine
5d5f4a73 160
e6006848 161If you were using L<Catalyst::Engine::PSGI>, this new release supersedes
162this engine in supporting L<Plack>. By default the Engine is now always
163L<Plack>. As a result, you can remove the dependency on
164L<Catalyst::Engine::PSGI> in your C<Makefile.PL>.
8f912f0b 165
166Applications that were using L<Catalyst::Engine::PSGI>
167previously should entirely continue to work in this release with no changes.
168
e6006848 169However, if you have an C<app.psgi> script, then you no longer need to
170specify the PSGI engine. Instead, the L<Catalyst> application class now
171has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
172which you can wrap in the middleware of your choice.
8f912f0b 173
174Catalyst will use the .psgi for your application if it is located in the C<home>
e6006848 175directory of the application.
697a3e9e 176
93a57b4b 177For example, if you were using L<Catalyst::Engine::PSGI> in the past, you will
8f912f0b 178have written (or generated) a C<script/myapp.psgi> file similar to this one:
697a3e9e 179
180 use Plack::Builder;
181 use MyCatalytApp;
182
183 MyCatalystApp->setup_engine('PSGI');
184
185 builder {
186 enable ... # enable your desired middleware
187 sub { MyCatalystApp->run(@_) };
188 };
189
8f912f0b 190Instead, you now say:
697a3e9e 191
192 use Plack::Builder;
193 use MyCatalystApp;
194
195 builder {
196 enable ... #enable your desired middleware
75d68821 197 MyCatalystApp->psgi_app;
697a3e9e 198 };
5d5f4a73 199
34effbc7 200In the simplest case:
8f912f0b 201
34effbc7 202 MyCatalystApp->setup_engine('PSGI');
203 my $app = sub { MyCatalystApp->run(@_) }
204
205becomes
206
34effbc7 207 my $app = MyCatalystApp->psgi_app(@_);
208
209B<NOT>:
210
211 my $app = sub { MyCatalystApp->psgi_app(@_) };
212 # If you make ^^ this mistake, your app won't work, and will confuse the hell out of you!
213
e6006848 214You can now move C<< script/myapp.psgi >> to C<< myapp.psgi >>, and the built-in
773b3b08 215Catalyst scripts and your test suite will start using your .psgi file.
ad15c817 216
e6006848 217B<NOTE:> If you rename your .psgi file without these modifications, then
218any tests run via L<Catalyst::Test> will not be compatible with the new
219release, and will result in the development server starting, rather than
220the expected test running.
93a57b4b 221
c47cd2ce 222B<NOTE:> If you are directly accessing C<< $c->req->env >> to get the PSGI
223environment then this accessor is moved to C<< $c->engine->env >>,
224you will need to update your code.
225
e6006848 226=head2 Engines which are known to be broken
93a57b4b 227
e6006848 228The following engines B<DO NOT> work as of Catalyst version 5.9. The
229core team will be happy to work with the developers and/or users of
230these engines to help them port to the new Plack/Engine system, but for
231now, applications which are currently using these engines B<WILL NOT>
232run without modification to the engine code.
93a57b4b 233
234=over
235
236=item Catalyst::Engine::Wx
237
ad15c817 238=item Catalyst::Engine::Zeus
239
240=item Catalyst::Engine::JobQueue::POE
241
242=item Catalyst::Engine::XMPP2
243
244=item Catalyst::Engine::SCGI
245
93a57b4b 246=back
247
5d5f4a73 248=head2 Engines with unknown status
249
e6006848 250The following engines are untested or have unknown compatibility.
251Reports are highly encouraged:
5d5f4a73 252
ad15c817 253=over
254
255=item Catalyst::Engine::Mojo
256
e6006848 257=item Catalyst::Engine::Server (marked as Deprecated)
ad15c817 258
e6006848 259=item Catalyst::Engine::HTTP::POE (marked as Deprecated)
ad15c817 260
261=back
5d5f4a73 262
3f22de0b 263=head2 Plack functionality
040835f0 264
3f22de0b 265See L<Catalyst::PSGI>.
0aafa77a 266
dacd8b0e 267=head2 Tests in 5.9
4db14a9a 268
e6006848 269Tests should generally work the same in Catalyst 5.9, but there are
270some differences.
4db14a9a 271
e6006848 272Previously, if using L<Catalyst::Test> and doing local requests (against
273a local server), if the application threw an exception then this
274exception propagated into the test.
4db14a9a 275
e6006848 276This behavior has been removed, and now a 500 response will be returned
277to the test. This change standardizes behavior, so that local test
278requests behave similarly to remote requests.
4db14a9a 279
7e2ec16e 280=head1 Upgrading to Catalyst 5.80
281
5687c7f9 282Most applications and plugins should run unaltered on Catalyst 5.80.
7e2ec16e 283
8f61d649 284However, a lot of refactoring work has taken place, and several changes have
1a98f036 285been made which could cause incompatibilities. If your application or plugin
8f61d649 286is using deprecated code, or relying on side effects, then you could have
ba03ccca 287issues upgrading to this release.
5687c7f9 288
cf8eab35 289Most issues found with existing components have been easy to
8f61d649 290solve. This document provides a complete description of behavior changes
291which may cause compatibility issues, and of new Catalyst warnings which
773b3b08 292might be unclear.
7e2ec16e 293
8f61d649 294If you think you have found an upgrade-related issue which is not covered in
295this document, please email the Catalyst list to discuss the problem.
7e2ec16e 296
85f0a66f 297=head1 Moose features
298
8f61d649 299=head2 Application class roles
85f0a66f 300
8f61d649 301You can only apply method modifiers after the application's C<< ->setup >>
85f0a66f 302method has been called. This means that modifiers will not work with methods
773b3b08 303run during the call to C<< ->setup >>.
85f0a66f 304
a6eb852a 305See L<Catalyst::Manual::ExtendingCatalyst> for more information about using
306L<Moose> in your applications.
307
85f0a66f 308=head2 Controller actions in Moose roles
309
d76c88f3 310You can use L<MooseX::MethodAttributes::Role> if you want to declare actions
311inside Moose roles.
85f0a66f 312
d935773d 313=head2 Using Moose in Components
314
315The correct way to use Moose in a component in a both forward and backwards
316compatible way is:
317
318 package TestApp::Controller::Root;
319 use Moose;
320 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
321
322See L<Components which inherit from Moose::Object before Catalyst::Component>.
323
8f61d649 324=head1 Known backwards compatibility breakages
7e2ec16e 325
8f61d649 326=head2 Applications in a single file
85f0a66f 327
328Applications must be in their own file, and loaded at compile time. This
8f61d649 329issue generally only affects the tests of CPAN distributions. Your
330application will fail if you try to define an application inline in a
331block, and use plugins which supply a C< new > method, then use that
332application latter in tests within the same file.
85f0a66f 333
334This is due to the fact that Catalyst is inlining a new method on your
8f61d649 335application class allowing it to be compatible with Moose. The method
336used to do this changed in 5.80004 to avoid the possibility of reporting
337an 'Unknown Error' if your application failed to compile.
85f0a66f 338
38f90e49 339=head2 Issues with Class::C3
340
8f61d649 341Catalyst 5.80 uses the L<Algorithm::C3> method dispatch order. This is
342built into Perl 5.10, and comes via L<Class::C3> for Perl 5.8. This
343replaces L<NEXT> with L<Class::C3::Adopt::NEXT>, forcing all components
344to resolve methods using C3, rather than the unpredictable dispatch
345order of L<NEXT>.
38f90e49 346
cf8eab35 347This issue manifests itself by your application failing to start due to an
5d06547d 348error message about having a non-linear @ISA.
349
8f61d649 350The Catalyst plugin most often causing this is
351L<Catalyst::Plugin::Session::Store::FastMmap> - if you are using this
352plugin and see issues, then please upgrade your plugins, as it has been
353fixed. Note that Makefile.PL in the distribution will warn about known
354incompatible components.
5d06547d 355
356This issue can, however, be found in your own application - the only solution is
357to go through each base class of the class the error was reported against, until
358you identify the ones in conflict, and resolve them.
359
360To be able to generate a linear @ISA, the list of superclasses for each
361class must be resolvable using the C3 algorithm. Unfortunately, when
362superclasses are being used as mixins (to add functionality used in your class),
ae7da8f5 363and with multiple inheritance, it is easy to get this wrong.
38f90e49 364
365Most common is the case of:
366
367 package Component1; # Note, this is the common case
368 use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
369
8f61d649 370 package Component2; # Accidentally saying it this way causes a failure
38f90e49 371 use base qw/Class::Data::Inheritable Class::Accessor::Fast/;
372
373 package GoesBang;
374 use base qw/Component1 Component2/;
375
5d06547d 376Any situation like this will cause your application to fail to start.
38f90e49 377
8f61d649 378For additional documentation about this issue, and how to resolve it, see
5d06547d 379L<Class::C3::Adopt::NEXT>.
38f90e49 380
6f04e56a 381=head2 Components which inherit from Moose::Object before Catalyst::Component
7e2ec16e 382
6f04e56a 383Moose components which say:
7e2ec16e 384
6f04e56a 385 package TestApp::Controller::Example;
386 use Moose;
845bfcd2 387 extends qw/Moose::Object Catalyst::Component/;
7e2ec16e 388
8f61d649 389to use the constructor provided by Moose, while working (if you do some hacks
1a98f036 390with the C< BUILDARGS > method), will not work with Catalyst 5.80 as
6f04e56a 391C<Catalyst::Component> inherits from C<Moose::Object>, and so C< @ISA > fails
25f61108 392to linearize.
6f04e56a 393
6f04e56a 394The correct way to use Moose in a component in a both forward and backwards
395compatible way is:
396
397 package TestApp::Controller::Root;
398 use Moose;
399 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
400
ba03ccca 401Note that the C< extends > declaration needs to occur in a begin block for
3df46b1b 402L<attributes> to operate correctly.
403
d935773d 404This way you do not inherit directly from C<Moose::Object>
405yourself. Having components which do not inherit their constructor from
406C<Catalyst::Component> is B<unsupported>, and has never been recommended,
407therefore you're on your own if you're using this technique. You'll need
408to detect the version of Catalyst your application is running, and deal
409with it appropriately.
410
eaae9a92 411You also don't get the L<Moose::Object> constructor, and therefore attribute
412initialization will not work as normally expected. If you want to use Moose
3df46b1b 413attributes, then they need to be made lazy to correctly initialize.
414
415Note that this only applies if your component needs to maintain component
416backwards compatibility for Catalyst versions before 5.71001 - in 5.71001
417attributes work as expected, and the BUILD method is called normally
eaae9a92 418(although BUILDARGS is not).
3df46b1b 419
420If you depend on Catalyst 5.8, then B<all> Moose features work as expected.
8566c0de 421
d935773d 422You will also see this issue if you do the following:
423
424 package TestApp::Controller::Example;
425 use Moose;
426 use base 'Catalyst::Controller';
427
428as C< use base > appends to @ISA.
429
e11cac87 430=head3 use Moose in MyApp
431
432Similar to the above, this will also fail:
433
434 package MyApp;
435 use Moose;
436 use Catalyst qw/
437 ConfigLoader
438 /;
439 __PACKAGE__->setup;
440
441If you need to use Moose in your application class (e.g. for method modifiers
8f61d649 442etc.) then the correct technique is:
e11cac87 443
444 package MyApp;
445 use Moose;
5b6f82d2 446 use Catalyst;
447
e11cac87 448 extends 'Catalyst';
5b6f82d2 449
450 __PACKAGE__->config( name => 'MyApp' );
e11cac87 451 __PACKAGE__->setup(qw/
452 ConfigLoader
453 /);
454
04a48104 455=head2 Anonymous closures installed directly into the symbol table
456
457If you have any code which installs anonymous subroutine references directly
458into the symbol table, you may encounter breakages. The simplest solution is
459to use L<Sub::Name> to name the subroutine. Example:
460
e11cac87 461 # Original code, likely to break:
1a98f036 462 my $full_method_name = join('::', $package_name, $method_name);
04a48104 463 *$full_method_name = sub { ... };
464
e11cac87 465 # Fixed Code
04a48104 466 use Sub::Name 'subname';
467 my $full_method_name = join('::',$package_name, $method_name);
468 *$full_method_name = subname $full_method_name, sub { ... };
469
8f61d649 470Additionally, you can take advantage of Catalyst's use of L<Class::MOP> and
471install the closure using the appropriate metaclass. Example:
04a48104 472
473 use Class::MOP;
474 my $metaclass = Moose::Meta::Class->initialize($package_name);
475 $metaclass->add_method($method_name => sub { ... });
476
780654ad 477=head2 Hooking into application setup
478
8f61d649 479To execute code during application start-up, the following snippet in MyApp.pm
780654ad 480used to work:
481
482 sub setup {
483 my ($class, @args) = @_;
484 $class->NEXT::setup(@args);
485 ... # things to do after the actual setup
486 }
487
8f61d649 488With Catalyst 5.80 this won't work anymore, because Catalyst no longer
489uses NEXT.pm for method resolution. The functionality was only ever
490originally operational as L<NEXT> remembers what methods have already
491been called, and will not call them again.
780654ad 492
1a98f036 493Using this now causes infinite recursion between MyApp::setup and
494Catalyst::setup, due to other backwards compatibility issues related to how
e6c5b548 495plugin setup works. Moose method modifiers like C<< before|after|around setup
1a98f036 496=> sub { ... }; >> also will not operate correctly on the setup method.
780654ad 497
498The right way to do it is this:
499
500 after setup_finalize => sub {
501 ... # things to do after the actual setup
502 };
503
ade00972 504The setup_finalize hook was introduced as a way to avoid this issue.
1a98f036 505
e11cac87 506=head2 Components with a new method which returns false
7e2ec16e 507
8dd2f514 508Previously, if you had a component which inherited from Catalyst::COMPONENT,
8f61d649 509but overrode the new method to return false, then your class's configuration
8dd2f514 510would be blessed into a hash on your behalf, and this would be returned from
a87f5aa5 511the COMPONENT method.
7e2ec16e 512
8f61d649 513This behavior makes no sense, and so has been removed. Implementing your own
514C< new > method in components is B<highly> discouraged. Instead, you should
515inherit the new method from Catalyst::Component, and use Moose's BUILD
1a98f036 516functionality and/or Moose attributes to perform any construction work
517necessary for your class.
7e2ec16e 518
519=head2 __PACKAGE__->mk_accessor('meta');
520
e11cac87 521Won't work due to a limitation of L<Moose>. This is currently being fixed
522inside Moose.
7e2ec16e 523
524=head2 Class::Data::Inheritable side effects
525
8dd2f514 526Previously, writing to a class data accessor would copy the accessor method
527down into your package.
528
8f61d649 529This behavior has been removed. While the class data is still stored
8dd2f514 530per-class, it is stored on the metaclass of the class defining the accessor.
7e2ec16e 531
8f61d649 532Therefore anything relying on the side effect of the accessor being copied down
8dd2f514 533will be broken.
7e2ec16e 534
1a98f036 535The following test demonstrates the problem:
8dd2f514 536
537 {
538 package BaseClass;
539 use base qw/Class::Data::Inheritable/;
540 __PACKAGE__->mk_classdata('foo');
541 }
542
543 {
544 package Child;
545 use base qw/BaseClass/;
546 }
547
548 BaseClass->foo('base class');
549 Child->foo('sub class');
eaae9a92 550
e11cac87 551 use Test::More;
8dd2f514 552 isnt(BaseClass->can('foo'), Child->can('foo'));
7e2ec16e 553
f4dda4a8 554=head2 Extending Catalyst::Request or other classes in an ad hoc manner using mk_accessors
7e2ec16e 555
8dd2f514 556Previously, it was possible to add additional accessors to Catalyst::Request
557(or other classes) by calling the mk_accessors class method.
7e2ec16e 558
8f61d649 559This is no longer supported - users should make a subclass of the class whose
560behavior they would like to change, rather than globally polluting the
e11cac87 561Catalyst objects.
8be895a7 562
10011c19 563=head2 Confused multiple inheritance with Catalyst::Component::COMPONENT
8be895a7 564
8f61d649 565Previously, Catalyst's COMPONENT method would delegate to the method on
566the right hand side, which could then delegate back again with
567NEXT. This is poor practice, and in addition, makes no sense with C3
568method dispatch order, and is therefore no longer supported.
bcc773b9 569
ba03ccca 570If a COMPONENT method is detected in the inheritance hierarchy to the right
bcc773b9 571hand side of Catalyst::Component::COMPONENT, then the following warning
572message will be emitted:
7e2ec16e 573
8dd2f514 574 There is a COMPONENT method resolving after Catalyst::Component
5687c7f9 575 in ${next_package}.
8dd2f514 576
8f61d649 577The correct fix is to re-arrange your class's inheritance hierarchy so that the
bcc773b9 578COMPONENT method you would like to inherit is the first (left-hand most)
579COMPONENT method in your @ISA.
7e2ec16e 580
7e9340de 581=head2 Development server relying on environment variables
582
583Previously, the development server would allow propagation of system
584environment variables into the request environment, this has changed with the
585adoption of Plack. You can use L<Plack::Middleware::ForceEnv> to achieve the
586same effect.
587
c571d2c8 588=head1 WARNINGS
589
63b546b1 590=head2 Actions in your application class
591
592Having actions in your application class will now emit a warning at application
e256d0e1 593startup as this is deprecated. It is highly recommended that these actions are moved
63b546b1 594into a MyApp::Controller::Root (as demonstrated by the scaffold application
55dd186c 595generated by catalyst.pl).
da73c6af 596
e256d0e1 597This warning, also affects tests. You should move actions in your test,
598creating a myTest::Controller::Root, like the following example:
da73c6af 599
600 package MyTest::Controller::Root;
95a52a01 601
da73c6af 602 use strict;
603 use warnings;
95a52a01 604
da73c6af 605 use parent 'Catalyst::Controller';
95a52a01 606
da73c6af 607 __PACKAGE__->config(namespace => '');
95a52a01 608
da73c6af 609 sub action : Local {
610 my ( $self, $c ) = @_;
611 $c->do_something;
612 }
95a52a01 613
da73c6af 614 1;
63b546b1 615
ac9279b0 616=head2 ::[MVC]:: naming scheme
617
618Having packages called MyApp::[MVC]::XX is deprecated and can no longer be generated
619by catalyst.pl
620
621This is still supported, but it is recommended that you rename your application
622components to Model/View/Controller.
623
624A warning will be issued at application startup if the ::[MVC]:: naming scheme is
625in use.
626
ade00972 627=head2 Catalyst::Base
628
8f61d649 629Any code using L<Catalyst::Base> will now emit a warning; this
630module will be removed in a future release.
ade00972 631
c571d2c8 632=head2 Methods in Catalyst::Dispatcher
633
8f61d649 634The following methods in Catalyst::Dispatcher are implementation
635details, which may change in the 5.8X release series, and therefore their use
bcc773b9 636is highly deprecated.
c571d2c8 637
638=over
639
8dd2f514 640=item tree
c571d2c8 641
8dd2f514 642=item dispatch_types
c571d2c8 643
8dd2f514 644=item registered_dispatch_types
c571d2c8 645
8dd2f514 646=item method_action_class
c571d2c8 647
8dd2f514 648=item action_hash
c571d2c8 649
650=item container_hash
651
652=back
653
654The first time one of these methods is called, a warning will be emitted:
7e2ec16e 655
bcc773b9 656 Class $class is calling the deprecated method Catalyst::Dispatcher::$public_method_name,
dacd8b0e 657 this will be removed in Catalyst 5.9
7e2ec16e 658
c571d2c8 659You should B<NEVER> be calling any of these methods from application code.
660
8f61d649 661Plugin authors and maintainers whose plugins currently call these methods
8f5a2bd9 662should change to using the public API, or, if you do not feel the public API
8f61d649 663adequately supports your use case, please email the development list to
8f5a2bd9 664discuss what API features you need so that you can be appropriately supported.
7e2ec16e 665
95b20422 666=head2 Class files with names that don't correspond to the packages they define
7e2ec16e 667
e11cac87 668In this version of Catalyst, if a component is loaded from disk, but no
ba03ccca 669symbols are defined in that component's name space after it is loaded, this
bcc773b9 670warning will be issued:
7e2ec16e 671
bcc773b9 672 require $class was successful but the package is not defined.
7e2ec16e 673
8f61d649 674This is to protect against confusing bugs caused by mistyping package names,
bcc773b9 675and will become a fatal error in a future version.
676
677Please note that 'inner packages' (via L<Devel::InnerPackage>) are still fully
8f61d649 678supported; this warning is only issued when component file naming does not map
bcc773b9 679to B<any> of the packages defined within that component.
7e2ec16e 680
5687c7f9 681=head2 $c->plugin method
682
25f61108 683Calling the plugin method is deprecated, and calling it at run time is B<highly
8dd2f514 684deprecated>.
7e2ec16e 685
95a52a01 686Instead you are recommended to use L<Catalyst::Model::Adaptor> or similar to
ba03ccca 687compose the functionality you need outside of the main application name space.
7e2ec16e 688
4e68badc 689Calling the plugin method will not be supported past Catalyst 5.81.
bcc773b9 690
7e2ec16e 691=cut
4e68badc 692